我如何才能在PyGame中获得这个正方形

时间:2019-01-05 18:16:59

标签: python pygame

我正在尝试使该正方形穿过屏幕并沿着其经过的路径返回,但它始终保持在原位置。这是两个if语句之间的冲突,我尝试使用break语句,但这只是停止了一切。

if squareX < 100:
    squareX += 1
elif squareX > 900:
    squareX -= 1

2 个答案:

答案 0 :(得分:1)

您的游戏中有一个状态,该状态描述了rect移动的方向。因此,当您离开屏幕时,此状态会更改。

当您更新游戏时(这是您在主循环中执行的三件事之一:处理事件,更新游戏状态,绘制游戏),您会查看状态并决定将矩形移动到哪个方向。然后检查它是否在屏幕之外。

这是一个最小的例子:

import pygame

def main():
    screen = pygame.display.set_mode((400, 200))
    clock = pygame.time.Clock()
    rect = pygame.Rect(100, 100, 32, 32)
    direction = 1
    while True:
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                return

        rect.move_ip(direction * 3, 0)
        if not screen.get_rect().contains(rect):
            direction *= -1

        screen.fill((30, 30, 30))
        pygame.draw.rect(screen, pygame.Color('dodgerblue'), rect)
        clock.tick(120)
        pygame.display.flip()

if __name__ == '__main__':
    main()

enter image description here

答案 1 :(得分:-1)

简单,您首先需要了解什么是Sprite类。 请遵循以下代码:

import pygame
class MovingSquare(pygame.sprite.Sprite):
    def __init__(self, location, speed):
        pygame.sprite.Sprite.__init__(self)
        image_surface = pygame.surface.Surface([30, 30])
        image_surface.fill([0,0,0])
        self.image = image_surface.convert()
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = location
        self.speed=speed
    def move(self):
        self.rect=self.rect.move(self.speed)
        if self.rect.right>screen.get_width() or self.rect.left<0:
            self.speed[0]=-self.speed[0]
pygame.init()
screen=pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
x=5
y=0
squareX=MovingSquare([50, 50], [x, y])
clock=pygame.time.Clock()
running=True
while running:
    clock.tick(30)
    square.move()
    screen.blit(squareX.image, squareX.rect)
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
pygame.quit()

唯一的问题是它不会擦除其轨迹,因此我建议改用图像文件。