小学课后服务 Python少儿编程 进阶篇:11-飞机大战2 课件 (19张PPT)

资源下载
  1. 二一教育资源

小学课后服务 Python少儿编程 进阶篇:11-飞机大战2 课件 (19张PPT)

资源简介

(共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中提供了精灵类,继承它就可以定义自己的精灵,下面我们定义飞机精灵
1
2
定义飞机精灵类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属性设置为方块,那么飞机的表现形式就是一个方块。
飞机精灵类定义完成之后,画到屏幕中
1
2
添加黄色部分代码—创建player对象,并绘制到屏幕
# 定义玩家飞机对象
player = Player()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
# 结束游戏
running = False
elif 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)
600
480
(0,600)
(480,0)
(480,600)
X轴
Y轴
左右移动,改变的是角色的X坐标
当按下左移键
240
200
160
120
280
320
360
X坐标减少
当按下右移键
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轴上的速度设置为‐8
self.speedx = -8
# 如果右键被按下
if keys[pygame.K_RIGHT]:
# x轴上的速度设置为8
self.speedx = 8
# 设置角色的x轴坐标
self.rect.x += self.speedx
3
最后,将角色的位置设置为当前坐标加上按键之后的速度
在死循环中调用update方法,然后运行程序,结果如下:
这是因为在每次绘制飞机时,并没有绘制屏幕,导致绘制飞机后的界面又重新做了屏幕
要解决这个问题,只需要每次绘制飞机的时候也绘制背景即可,绘制背景只需要给一个背景颜色。
可以看到,屏幕下方出现了一块绿色区域,这显然不是我们想要的移动效果。
为屏幕添加背景色
再次运行
# 绘制屏幕的背景颜色
screen.fill((0, 0, 0))
现在飞机虽然可以移动,但是非常不合理,不仅移动的速度非常快,而且能够移出屏幕
接下来,我们对飞机的移动进行设置,使其移动更加合理
飞机移动合理性
首先解决飞机能够移出屏幕的问题
1
更新update方法,设置边界限制
2
运行程序,飞机只能在屏幕中移动
# 边缘检测,如果碰到边缘,就停止不动
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
当飞机的右边缘即将超出屏幕右边缘坐标时,将飞机右边缘坐标设为屏幕右边缘坐标,左侧限制同理。
边缘限制写好之后,来看一下飞机的移动速度非常快的原因
我们知道,电脑的运行速度是非常快的,当我们按下按键时,死循环已经执行了很多次
已运行了五次为例:
8像素
8像素
8像素
8像素
8像素
8像素
执行一次,移动像素
执行五次,移动5x8也就是40像素
实际程序的执行速度更加快,所以看起来飞机移动的非常快
知道原因之后就要想办法解决,这里有两种方法:
第一种是修改左右移动的像素数,减慢飞机运动速度
第二种方式在游戏中更常见:控制游戏的节奏!
这里我们使用pygame中的定时器来控制游戏节奏
1
初始化计时器
2
定义一个常量并在死循环中设定循环执行的时间
# 初始化计时器
clock = pygame.time.Clock()
FPS = 60
clock.tick(FPS)
注意:这里的60并不是设定的循环执行的时间,而是每秒循环执行的次数,
1秒等于1000毫秒,所有每次循环的执行时间就是1000/60 = 16.66 约等于17毫秒。
3
使用time模块,查看现在循环执行的时间
可以发现,基本上是17毫秒的样子
import time
t = time.time()
# 输出毫秒值
print(int(round(t * 1000)))
现在运行程序,飞机就可以合理的在屏幕中移动了
总结
Summary
Pygame精灵类的使用

pygame游戏节奏的控制方式

Thanks!

展开更多......

收起↑

资源预览