我正在尝试使该正方形穿过屏幕并沿着其经过的路径返回,但它始终保持在原位置。这是两个if语句之间的冲突,我尝试使用break语句,但这只是停止了一切。
if squareX < 100:
squareX += 1
elif squareX > 900:
squareX -= 1
答案 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()
答案 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()
唯一的问题是它不会擦除其轨迹,因此我建议改用图像文件。