【问题标题】:Falling mechanics (gravity) in pygamepygame中的下落力学(重力)
【发布时间】:2017-10-21 22:27:08
【问题描述】:

我如何在空旷的空间中获得一些坠落的机制,互联网上的许多答案都说要增加重力,但我不明白他们是如何做到的,他们只是向我展示了一堆方程式。

另外,如何将图像设置为背景?

这是我的源代码:

import pygame


pygame.init()

display_width = 2560
display_height = 1440

white = (255,255,255)

gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('RGB')
clock = pygame.time.Clock()

filler = pygame.image.load('filleraftergimp.png')


def fill(x,y):
    gameDisplay.blit(filler,(x,y))


x = (display_width * 0.45)
y = (display_height * 0.8)

x_change = 0
y_change = 0

diedorgameover = False
while not diedorgameover:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            diedorgameover = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                x_change = -5
            elif event.key == pygame.K_d:
                x_change = 5
            elif event.key == pygame.K_s:
                y_change = 5
            elif event.key == pygame.K_w:
                y_change = -5

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_a or event.key == pygame.K_d:
                x_change = 0
            if event.key == pygame.K_s or event.key == pygame.K_w:
                y_change = 0

    x += x_change
    y += y_change
    gameDisplay.fill(white)   
    fill(x,y)


    pygame.display.update()
    clock.tick(60)


pygame.quit()
quit()

【问题讨论】:

  • 请一次只问一个问题。我最近解释了如何实现重力here。在您的示例中,您可以增加您的 y_change 每帧以加速您的对象,例如 y_change += 1
  • 你能解释一下你在其他帖子中做了什么吗,因为在检查之后我无法弄清楚你做了什么;我也尝试改变我的 y_change 值,但它只是减慢了我的性格。您的意思是在控制脚本部分更改 y_value 对吗?
  • 顺便说一句,感谢您花时间回答我的问题

标签: python background pygame physics


【解决方案1】:

要在您的游戏中实现重力(如在 2D 平台游戏中),您只需在每帧增加 y_change 变量,以便每次将对象向下移动得更快一些。看看这个例子:

import pygame as pg


pg.init()

LIGHTBLUE = pg.Color('lightskyblue2')
DARKBLUE = pg.Color(11, 8, 69)

display = pg.display.set_mode((800, 600))
width, height = display.get_size()
clock = pg.time.Clock()

player_image = pg.Surface((30, 60))
player_image.fill(DARKBLUE)

x = width * 0.45
y = 0
x_change = 0
y_change = 0
on_ground = False

# A constant value that you add to the y_change each frame.
GRAVITY = .3

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
        elif event.type == pg.KEYDOWN:
            if event.key == pg.K_a:
                x_change = -5
            elif event.key == pg.K_d:
                x_change = 5
            elif event.key == pg.K_s:
                y_change = 5
            elif event.key == pg.K_w:
                if on_ground:  # Only jump if the player is on_ground.
                    y_change = -12
                    on_ground = False
        elif event.type == pg.KEYUP:
            if event.key == pg.K_a and x_change < 0:
                x_change = 0
            elif event.key == pg.K_d and x_change > 0:
                x_change = 0

    # Add the GRAVITY value to y_change, so that
    # the object moves faster each frame.
    y_change += GRAVITY
    x += x_change
    y += y_change
    # Stop the object when it's near the bottom of the screen.
    if y >= height - 130:
        y = height - 130
        y_change = 0
        on_ground = True

    # Draw everything.
    display.fill(LIGHTBLUE)
    pg.draw.line(display, (0, 0, 0), (0, height-70), (width, height-70))
    display.blit(player_image, (x, y))

    pg.display.update()
    clock.tick(60)

pg.quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多