我正在尝试移动一个图像,并想按下键盘上的某个键来动态地在窗口中移动。
我在下面这样做,但请注意,只有当我按下键盘键并移动鼠标时,图像才会移动:
import sys
import pygame
UP = False
DOWN = False
LEFT = False
RIGHT = False
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
img = pygame.image.load('tank.png')
tank = [(img), (50, 50)]
while True:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
UP = True
elif event.key == pygame.K_DOWN:
DOWN = True
elif event.key == pygame.K_LEFT:
LEFT = True
elif event.key == pygame.K_RIGHT:
RIGHT = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
UP = False
elif event.key == pygame.K_DOWN:
DOWN = False
elif event.key == pygame.K_LEFT:
LEFT = False
elif event.key == pygame.K_RIGHT:
RIGHT = False
if (UP):
tank = [tank[0], (tank[1][0], tank[1][1] - 10)]
elif (DOWN):
tank = [tank[0], (tank[1][0], tank[1][1] + 10)]
elif (LEFT):
tank = [tank[0], (tank[1][0] - 10, tank[1][1])]
elif (RIGHT):
tank = [tank[0], (tank[1][0] + 10, tank[1][1])]
screen.fill((0,0,0))
screen.blit(tank[0], tank[1])
pygame.display.update()
我不希望发生这种情况,我只想按下键盘键,无论鼠标是否穿过窗口,都可以自由移动图像。
我该如何解决这个问题?
发布于 2019-10-03 00:09:02
您的问题很简单-您的移动代码不是外部while的一部分,而是内部事件循环的一部分。这导致移动仅在事件发生的情况下执行。鼠标或键盘不相关。请参阅以下内容,以获取改进后的工作版本:
import sys
import pygame
def main():
pressed = set()
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
img = pygame.image.load('tank.jpg')
tank = [(img), (50, 50)]
while True:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
pressed.add(event.key)
if event.type == pygame.KEYUP and event.key in pressed:
pressed.remove(event.key)
if pygame.K_UP in pressed:
tank = [tank[0], (tank[1][0], tank[1][1] - 10)]
if pygame.K_DOWN in pressed:
tank = [tank[0], (tank[1][0], tank[1][1] + 10)]
elif pygame.K_LEFT in pressed:
tank = [tank[0], (tank[1][0] - 10, tank[1][1])]
elif pygame.K_RIGHT in pressed:
tank = [tank[0], (tank[1][0] + 10, tank[1][1])]
screen.fill((0,0,0))
screen.blit(tank[0], tank[1])
pygame.display.update()
if __name__ == '__main__':
main()
https://stackoverflow.com/questions/58205066
复制相似问题