我正在尝试移动图像,并想按键盘上的某些键以在窗口中动态移动。
我在下面这样做,但是请注意,只有当我按下键盘键并移动鼠标时,图像才会移动:
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()
我不希望发生这种情况,我只想按键盘键并自由移动图像,而不管鼠标是否在窗口中移动。
我该如何解决这个问题?
您的问题很简单-您的运动代码不是外部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()