如何使图像移动

时间:2016-03-30 20:53:05

标签: python pygame

所以我想要使用WASD键移动图像。我不完全明白如何做到这一点,我确实有一个主循环。 这就是我的图像和它的可能性

no_image = pygame.image.load("Ideot.png").convert
x_coord = 500 
y_coord = 250
no_position = [x_coord,y_coord]

此代码位于主循环之后。在主循环后,我实际上通过

绘制图像
screen.blit(no_image,no_position)

这就是我的循环的样子 done = False

while not done:
   for event in pygame == pygame.Quit:
       done = True

您能否展示如何使用WASD

移动图像

1 个答案:

答案 0 :(得分:2)

首先,我将解决当前的评论。 MattDMo是对的,这不是代码编写服务,而是一种帮助人们理解他们的问题或者为什么工作或为什么不工作的方法。首先尝试是一个好主意,然后问你的问题,如果你无法弄清楚。 marienbad的链接确实使图像移动,但是不方便。该链接的代码会在您每次按下某个键时移动您的图像(很有用,我建议您查看它),但是按住按键时移动会很好。

在按住键的同时移动图像非常棘手。我更喜欢使用布尔值。

如果您没有使用tick方法,请立即停止并获取一个方法。看看pygame.org/docs看看如何做,他们有很好的示例代码。没有它,移动将无法正常工作,因为如果你不限制它,这个循环将以你的计算机可以处理的速度运行,所以你甚至可能看不到你的移动。

from pygame.locals import * # useful pygame variables are now at your disposle without typing pygame everywhere.

speed = (5, 5) # Amount of pixels to move every frame (loop).
moving_up = False
moving_right = False
moving_down = False
moving_left = False # Default starting, so there is no movement at first.

以上代码适用于OUTSIDE你的while循环。你的循环事件需要稍微修改,以改进你的代码,我建议在这里放置函数,或者使用字典来消除所有这些if语句的需要,但我不仅仅是因为我的答案更简单并得到了指向。我遗漏了一些细节,比如event.quit,因为你已经有了它们。

如果你不包括keyup部分,你的角色永远不会停止移动!

for event in pygame.event.get():
    if event.type == KEYDOWN:
        if event.key == K_w:
            moving_up = True
        if event.key == K_d
            moving_right = True
        if event.key == K_s:
            moving_down = True
        if event.key == K_a:
            moving_left = True

    if event.type == KEYUP:
       if event.key == K_w:
            moving_up = False # .. repeat this for all 4.

然后在循环中......

if moving_up:
    y_coord += -speed[1] # Negative speed, because positive y is down!
if moving_down:
    y_coord += speed[1]
if moving_right:
    x_coord += speed[0]
if moving_left:
    x_coord += -speed[0]

现在你的x / y坐标会在设置为移动时改变,这将用于blit你的图像!确保你在这种情况下不使用elif,如果你持有2个键,你希望能够通过组合键来移动,比如向右和向上移动,这样你就可以向东北移动。