pygame中的图像是对角移动而不是左,右,上和下移动

时间:2014-01-18 19:19:45

标签: pygame

我只想尝试使用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()

2 个答案:

答案 0 :(得分:0)

你应该在循环中重置精灵的速度。将movexmovey向下移动一点。

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_aif it is w or s删除其中的代码并添加

Movey = 0

与a和d相反:

Movex = 0

希望这有帮助!