gpt4 book ai didi

python - 只要我在 PyGame 中按住任何键,如何设置我的角色移动?

转载 作者:行者123 更新时间:2023-12-04 07:58:38 36 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How can I make a sprite move when key is held down

(6 个回答)


去年关闭。




我正在 PyGame 中创建一个简单的游戏。但问题是,每当我按住一个键时,我的角色会在一步后停止移动,直到我松开键并再次按下它时才会移动。代码如下。


pygame.init()

screen_width = 800
screen_height = 800

screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("SPACE INVADER")
icon = pygame.image.load("game-controller.png")
pygame.display.set_icon(icon)

player_img = pygame.image.load("Webp.net-resizeimage.png")
playerX = 400
playerY = 700
playerX_change = 0


def player(x, y):
screen.blit(player_img, (x, y))


running = True

while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_change = -5
if event.key == pygame.K_RIGHT:
playerX_change = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change = 0

playerX += playerX_change
screen.fill((0, 0, 0))
player(playerX, playerY)
pygame.display.update()

最佳答案

这是 Indentation 的问题.您必须在应用程序循环而不是事件循环中移动对象并更新场景:

running = True

while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_change = -5
if event.key == pygame.K_RIGHT:
playerX_change = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change = 0

# INDENTATION

#<--|

playerX += playerX_change
screen.fill((0, 0, 0))
player(playerX, playerY)
pygame.display.update()

但是,请使用 pygame.key.get_pressed() 而不是键盘事件。
running = True

while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
playerX -= 5
if keys[pygame.K_RIGHT]:
playerX += 5

playerX += playerX_change
screen.fill((0, 0, 0))
player(playerX, playerY)
pygame.display.update()

解释:
键盘事件(见 pygame.event 模块)仅在按键状态改变时发生一次。 KEYDOWN每次按下一个键时都会发生一次事件。 KEYUP每次释放键时发生一次。将键盘事件用于单个操作或逐步移动。
pygame.key.get_pressed() 返回一个包含每个键状态的列表。如果按住某个键,则该键的状态为 True , 否则 False .使用 pygame.key.get_pressed() 评估按钮的当前状态并获得连续移动。

关于python - 只要我在 PyGame 中按住任何键,如何设置我的角色移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66579336/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com