太空射击 第02课:使用精灵( 二 )


精灵运动
请记住,在游戏循环中,我们有.() .这意味着对于组中的每个精灵,将查找一个()函数并运行它 。因此,要让我们的精灵移动,我们只需要定义它的更新规则:
class Player(pygame.sprite.Sprite):def __init__(self):# super().__init__() # 也可这样,只是没有参数selfpygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((50, 50))self.image.fill(GREEN)self.rect = self.image.get_rect()self.rect.center = (WIDTH / 2, HEIGHT / 2)def update(self):self.rect.x += 5
这意味着每次通过游戏循环时,我们都会将精灵的 x 坐标增加 5 个像素 。继续运行它,你会看到精灵消失在屏幕右侧:
让我们通过使精灵环绕运动来解决这个问题 - 每当它到达屏幕的右侧时,我们都会将其移动到左侧 。我们可以通过在精灵的rect上使用一个方便的“句柄”来轻松完成此操作:
因此,如果rect 的左边缘离开屏幕,我们将右边缘设置为 0:
class Player(pygame.sprite.Sprite):def __init__(self):# super().__init__() # 也可这样初始化超类,只是没有参数selfpygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((50, 50))self.image.fill(GREEN)self.rect = self.image.get_rect()self.rect.center = (WIDTH / 2, HEIGHT / 2)def update(self):self.rect.x += 5if self.rect.left > WIDTH:self.rect.right = 0
现在我们可以看到精灵将出现在屏幕周围:
这将在本课中完成 。继续尝试 - 请注意,您在精灵()方法中放入的任何内容都会在每一帧发生 。尝试让精灵上下移动(更改y坐标)或让它从墙上反弹(当矩形到达边缘时反转方向) 。
在下一教程中,我们将向您展示如何为精灵使用艺术 - 将其从普通正方形更改为动画角色 。
完整代码
【太空射击 第02课:使用精灵】import pygame# 常量定义:游戏部分WIDTH = 360HEIGHT = 480FPS = 30# 颜色部分RED = (255, 0, 0)GREEN = (0, 255, 0)BLUE = (0, 0, 255)BLACK = (0, 0, 0)WHITE = (255, 255, 255)PURPLE = (255, 0, 255)YELLOW = (255, 255, 0)# 玩家类class Player(pygame.sprite.Sprite):def __init__(self):# super().__init__() # 也可这样初始化超类,只是没有参数selfpygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((50, 50))self.image.fill(GREEN)self.rect = self.image.get_rect()self.rect.center = (WIDTH / 2, HEIGHT / 2)def update(self):self.rect.x +=5if self.rect.left > WIDTH:self.rect.left = 0# 初始化pygame,创建窗口pygame.init()pygame.mixer.init()screen = pygame.display.set_mode((WIDTH, HEIGHT))pygame.display.set_caption("游戏窗口标题")clock = pygame.time.Clock()all_sprites = pygame.sprite.Group()player = Player()all_sprites.add(player)# 游戏循环running = Truewhile running:# 处理游戏事件for event in pygame.event.get():# 检查窗口关闭事件if event.type == pygame.QUIT:running = False# 更新屏幕上的对象all_sprites.update()# 渲染(绘制)screen.fill(BLACK)all_sprites.draw(screen)# 渲染(绘制)后,翻转显示pygame.display.flip()# 游戏时钟clock.tick(FPS)pygame.quit()exit()