资源简介 (共19张PPT)Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.少儿编程课飞机大战2本节我们来使用另一种方式绘制小方块,并使其能够在屏幕中左右移动Pygame中的精灵除了绘制飞机,还可以通过创建精灵的方式来生成飞机1精灵是游戏开发中的术语。简单来说,游戏中会动的东西都叫精灵飞机陨石子弹飞机大战中的精灵2对于本游戏来说,目前有以下几种精灵使用精灵类来制作角色,会更加有利于对角色的管理以及功能的添加Pygame中提供了精灵类,继承它就可以定义自己的精灵,下面我们定义飞机精灵12定义飞机精灵类Player,定义初始化方法为了方便确定创建出的正方形的位置,设置一下它的中心和底的值,class Player(pygame.sprite.Sprite):def __init__(self):# 完成精灵的初始化pygame.sprite.Sprite.__init__(self)# 初始化飞机精灵的图像,也就是长什么样self.image = pygame.Surface((50, 50))# 初始化飞机精灵图像的颜色self.image.fill((0, 255, 0))这里的get_rect能够获取飞机的图像的长方形,也就是我们定义的长方形本身。# 角色的长方形self.rect = self.image.get_rect()# 设置长方形中心的x的值self.rect.centerx = WIDTH / 2# 设置长方形底的值self.rect.bottom = HEIGHT - 10通过设置rect的centerx值和bottom值,就能确定长方形所在的位置了。这里将image属性设置为方块,那么飞机的表现形式就是一个方块。飞机精灵类定义完成之后,画到屏幕中12添加黄色部分代码—创建player对象,并绘制到屏幕# 定义玩家飞机对象player = Player()running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:# 结束游戏running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:# 结束游戏running = False# 将玩家飞机绘制到屏幕上screen.blit(player.image, player.rect)# 重绘游戏界面,相当于刷新一次pygame.display.flip()pygame.quit运行程序,可以看到屏幕中同样出现了绿色小方块绘制到屏幕时,不需要指定位置,直接传入player.rect即可飞机左右移动接下来我们让飞机能够移动,首先来分析(0,0)600480(0,600)(480,0)(480,600)X轴Y轴左右移动,改变的是角色的X坐标当按下左移键240200160120280320360X坐标减少当按下右移键X坐标增加然后设置角色的X轴坐标为当前坐标加上这个变量,在死循环中不断的更新位置就可以了所以我们可以创建一个初始值为0,按下左键时设为负值、按下右键时设为正值的变量在player类中增加update方法,更新飞机的位置1在首先初始化X轴速度并获得按键状态2根据不同按键,将X轴速度设为不同值def update(self):self.speedx = 0# 获取按键状态keys = pygame.key.get_pressed()# 如果左移键被按下if keys[pygame.K_LEFT]:# x轴上的速度设置为‐8self.speedx = -8# 如果右键被按下if keys[pygame.K_RIGHT]:# x轴上的速度设置为8self.speedx = 8# 设置角色的x轴坐标self.rect.x += self.speedx3最后,将角色的位置设置为当前坐标加上按键之后的速度在死循环中调用update方法,然后运行程序,结果如下:这是因为在每次绘制飞机时,并没有绘制屏幕,导致绘制飞机后的界面又重新做了屏幕要解决这个问题,只需要每次绘制飞机的时候也绘制背景即可,绘制背景只需要给一个背景颜色。可以看到,屏幕下方出现了一块绿色区域,这显然不是我们想要的移动效果。为屏幕添加背景色再次运行# 绘制屏幕的背景颜色screen.fill((0, 0, 0))现在飞机虽然可以移动,但是非常不合理,不仅移动的速度非常快,而且能够移出屏幕接下来,我们对飞机的移动进行设置,使其移动更加合理飞机移动合理性首先解决飞机能够移出屏幕的问题1更新update方法,设置边界限制2运行程序,飞机只能在屏幕中移动# 边缘检测,如果碰到边缘,就停止不动if self.rect.right > WIDTH:self.rect.right = WIDTHif self.rect.left < 0:self.rect.left = 0当飞机的右边缘即将超出屏幕右边缘坐标时,将飞机右边缘坐标设为屏幕右边缘坐标,左侧限制同理。边缘限制写好之后,来看一下飞机的移动速度非常快的原因我们知道,电脑的运行速度是非常快的,当我们按下按键时,死循环已经执行了很多次已运行了五次为例:8像素8像素8像素8像素8像素8像素执行一次,移动像素执行五次,移动5x8也就是40像素实际程序的执行速度更加快,所以看起来飞机移动的非常快知道原因之后就要想办法解决,这里有两种方法:第一种是修改左右移动的像素数,减慢飞机运动速度第二种方式在游戏中更常见:控制游戏的节奏!这里我们使用pygame中的定时器来控制游戏节奏1初始化计时器2定义一个常量并在死循环中设定循环执行的时间# 初始化计时器clock = pygame.time.Clock()FPS = 60clock.tick(FPS)注意:这里的60并不是设定的循环执行的时间,而是每秒循环执行的次数,1秒等于1000毫秒,所有每次循环的执行时间就是1000/60 = 16.66 约等于17毫秒。3使用time模块,查看现在循环执行的时间可以发现,基本上是17毫秒的样子import timet = time.time()# 输出毫秒值print(int(round(t * 1000)))现在运行程序,飞机就可以合理的在屏幕中移动了总结SummaryPygame精灵类的使用√pygame游戏节奏的控制方式√Thanks! 展开更多...... 收起↑ 资源预览