Python pygame动画定向循环不起作用

时间:2013-07-01 14:34:30

标签: python loops animation pygame

所以我要浏览pygame书。我是Python的新手,我读过一本书并参加了课程,还浏览了各种网站。

我的问题是;如何使这个图像继续,例如,页面下方的“zig-zag”?

向下,向右,向下,向右,向下,向右 - 直到它到达页面底部然后上升到顶部并停止?

我对代码的问题在于它之后;向下,向右,向下 - 它只是继续向下而忽略了我写的代码。

import pygame, sys
from pygame.locals import *

pygame.init()

FPS = 30
fpsClock = pygame.time.Clock()

DISPLAYSURF = pygame.display.set_mode((1400,1100), 0, 32)
pygame.display.set_caption('mchammy')

WHITE = (255, 255, 255)
pigImg = pygame.image.load('mcsuperpig.png')
pigx = 10
pigy = 10
direction = 'down'

while True:
    DISPLAYSURF.fill(WHITE)

    if direction == 'down':
        pigy += 2
        if pigy == 100:
            direction = 'right'
    elif direction == 'right':
        pigx += 2
        if pigx == 100:
            direction = 'down'
    elif direction == 'down':
        pigy += 2
        if pigy == 200:
            direction = 'right'
    elif direction == 'right':
        pigx += 2
        if pigx == 200:
            direction = 'down'
    elif direction == 'down':
        pigy += 2
        if pigy += 700:
            direction = 'right'

    DISPLAYSURF.blit(pig.Img, (pigx, pigy))

    for event in pygame.event.get():
        if event.type == QUIT:
           pygame.quit()
           sys.exit()

    pygame.display.update()
    fpsClock.tick(FPS)

2 个答案:

答案 0 :(得分:1)

基本上 - 你误解了while循环。

您的条件if / elif条款几乎无效,每次while循环迭代时,它只会输入其中一个..并且已涵盖"down""right"两个选项前两个条款,意味着你永远不会到达其他条款。

如果您将其更改为:

if direction == 'down':
    pigy += 2
    if not pigy % 100:
        direction = 'right'
else:
    pigx += 2
    if not pigx % 100:
        direction = 'down'

然后,您的图像将按照任意方向移动的每100个像素切换方向。


我建议您了解有关Python的更多信息,为您的图像创建一个类以及为该运动创建一些适当的函数。让你的代码看起来更好,更干净 - 就像我确信你在整个学习Python中看到的其他代码一样。

答案 1 :(得分:1)

正如发布的那样,问题在于你的if语句,因为你已经在前两个语句中覆盖了它们,所以它永远不会达到最后三个条款

请改为尝试:

if direction == 'down'
    pigy += 2
    if (pigy == 100) or (pigy == 200) or (pigy == 700)
        direction = 'right'
elif direction == 'right'
    pigx += 2
    if (pigx == 100) or (pigx == 200)
        direction = 'down'

你有if pigy += 700,这是无效的(因为pigy + = 700表示增加700)所以我假设你的意思是if pigy == 700

希望这能让你走上正轨!