我只想尝试使用WASD在pygame中左右,上下移动图像。如果我从左到右或仅上下移动开始,它工作正常。但是当我从左右移动到向上或向下移动(或者反过来)时,图像开始对角移动。谁知道为什么?
我正在使用python 3.3.0。 Pygame 1.9.2
import pygame, sys
from pygame.locals import *
pygame.init()
screen=pygame.display.set_mode((640,480))
image = pygame.image.load('Player.png')
x,y=0,0
movex, movey=0,0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_d:
movex=+10
elif event.key==K_a:
movex=-10
elif event.key==K_s:
movey=+10
elif event.key==K_w:
movey=-10
x+=movex
y+=movey
screen.fill((200, 200, 200))
screen.blit(image, ( x,y))
pygame.display.flip()
答案 0 :(得分:0)
你应该在循环中重置精灵的速度。将movex
和movey
向下移动一点。
x,y=0,0
while True:
movex, movey=0,0
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_d:
movex=+10
elif event.key==K_a:
movex=-10
elif event.key==K_s:
movey=+10
elif event.key==K_w:
movey=-10
x+=movex
y+=movey
现在,当您释放A并按下W时,它将向上移动而不是对角线。
答案 1 :(得分:0)
你走在正确的道路上却忽略了一件事。如果我按右键,movex = 10对吗?好吧,如果我然后按向上键,movey = 10但movex = 10仍然因为你没有摆脱它改变它的值。所以在你的上下块(if / elif / else)一定要说
Movex = 0
在你的左右块中
Movey = 0
而且我打赌你放松按钮后你会继续前进?要解决此问题,请使用所有控件复制KEYDOWN块,然后将KEYDOWN更改为KEYUP。然后在所有的字母块中,例如:if event.key == K_a
,if it is w or s
删除其中的代码并添加
Movey = 0
与a和d相反:
Movex = 0
希望这有帮助!