gpt4 book ai didi

python - Pygame 图像在没有正确输入的情况下移动

转载 作者:行者123 更新时间:2023-12-01 02:10:41 25 4
gpt4 key购买 nike

我最近开始对 pygame 进行一些修改,并编写了这段小代码(按照教程):

import pygame

pygame.init()
display_width = 1920
display_height = 1080
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
gameDisplay = pygame.display.set_mode((display_width,display_height))

pygame.display.set_caption("Galvadon's Adventure")

clock = pygame.time.Clock()

galvadon = pygame.image.load("galvadonModelVersion1.0.png")

def galvadonIsHere(x,y):
gameDisplay.blit(galvadon,(x,y))

x = (display_width * 0.30)
y = (display_height * 0.2)
y_change = 0

crashed = False

while not crashed:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
y_change = 5
elif event.key == pygame.K_UP:
y_change = -5
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
y_change = 0
y += y_change

gameDisplay.fill(white)
galvadonIsHere(x,y)
print(event)
pygame.display.update()
clock.tick(30)

pygame.quit()
quit()

在某种程度上,这段代码有效,问题是,在我使用向上和向下箭头移动图像后,图像开始响应任何鼠标移动,只需沿其上次移动的方向滑动即可。我可能错过了一些东西,但我似乎无法找到它是什么。我查看了各个网站寻找答案,但找不到任何人提出类似的问题,因此我提出这个主题。

最佳答案

这里有几件事您可以做得更好。但让我们从解决问题开始。

“错误”是在您按下按键后,y_change 被设置并且永远不会在下一个引擎循环中重置。这应该对您有帮助:

...
while not crashed:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
y_change = 5
elif event.key == pygame.K_UP:
y_change = -5
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
y_change = 0
y += y_change

gameDisplay.fill(white)
galvadonIsHere(x, y)
print(event)
pygame.display.update()
clock.tick(30)

y_change = 0
...

请密切注意我的代码片段中的最后一行。在这里,您重置了y_change,因此在下一个引擎循环中,无论发生或不发生,都不会影响图像的位置。

重构和改进

首先,您可以同意检查 event 类型是否为 KEY_DOWN 以及嵌套检查它是否是特定按键按钮的阅读和使用起来很痛苦。更不用说您检查 event 类型是否为 KEYUP,即使您知道这里是 KEYDOWN:

    if event.type == pygame.KEYDOWN:
...
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
y_change = 0

所以,我所做的是定义辅助函数,它可以是普通的函数或lambda。现在,许多人会认为 lambda 函数正在影响可读性,但在这里它肯定可以帮助您进行这些检查。

示例:

key_pressed = lambda event, key: event.type == pygame.KEYDOWN and event.key == key

while not crashed:
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
break
elif key_pressed(event, pygame.K_DOWN):
y_change = 5
elif key_pressed(event, pygame.K_UP):
y_change = -5
else:
y_change = 0

y += y_change

gameDisplay.fill(white)
galvadonIsHere(x, y)
print(event)
pygame.display.update()
clock.tick(30)

y_change = 0

还有一件事,请注意是否有 pygame.QUIT 事件。 break 退出 for 循环,然后 while 循环也结束。这样您就不会处理任何排队事件,也不会更新和位图传送图像。

关于python - Pygame 图像在没有正确输入的情况下移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48721954/

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