如何在pygame中为矩形设置动画以永久地从一侧移动到另一侧?

时间:2018-04-23 23:45:00

标签: python pygame

import pygame
pygame.init()
#this game is called stack power tower

dis = pygame.display.set_mode((500, 500))
x = 50
y = 50
height = 40
width = 100
run = True
passs = True
while run:
    def animate(passs, x, y, height, width):
        while passs:
            if x <= vel:
                x+=vel
                pygame.draw.rect(x, y, (255, 0, 0),height, width)
                pygame.fill()
            elif x >= 500-vel:
                x-=vel
                pygame.draw.rect(x, y, (255, 0, 0), height, width)
                pygame.fill()
    pygame.time.delay(100)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    keys = pygame.key.get_pressed()
    if keys[pygame.K_Space]:
        passs=False
    else:
        animate(passs, x, y, height, width)

我不明白为什么我的代码无效。 pygame窗口上没有弹出任何内容。我试图动画矩形从x-pos移动到新的x-pos,连续来回,而不是在y方向。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你的代码有很多问题,很难说从哪里开始。

首先,您在循环中一次又一次地定义了一个函数,这是无效的

其次,你运行了一个没有退出条件的不需要的while循环

第三,您将错误的参数传递给draw.rect()函数

第四,所有条件都不正确

第五,pygame.fill()不是函数。

第六,不要运行time.Delay,请使用clock.tick(60)

第七,你没有更新屏幕。

这是正确的代码。

import pygame
pygame.init()

dis = pygame.display.set_mode((500, 500))
x = 50
y = 50
height = 40
width = 100
run = True
vel = 10
clock = pygame.time.Clock()
direction = 'Right'

def animate(x, y, height, width, direction):
    if x < 0:
        direction = 'Right'

    elif x > 500:
        direction = 'Left'

    if direction == 'Right':
        x += vel

    elif direction == 'Left':
        x -= vel

    pygame.draw.rect(dis, (255, 0, 0), pygame.Rect(x, y, width, height))

    return x, direction

while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    keys = pygame.key.get_pressed()

    dis.fill((0, 0, 0))


    x, direction = animate(x, y, height, width, direction)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

在您继续寻求帮助之前,请先了解有关python和pygame的更多信息。

pygame docs非常有用。