网站qq获取,wordpress 浮层,诸暨有哪些制作网站公司,动态ppt模板下载免费完整版目标设计英雄和子弹类使用pygame.key.get_pressed()移动英雄发射子弹1.设计英雄和子弹类1.1英雄需求游戏启动后#xff0c;英雄出现在屏幕的水平中间位置#xff0c;距离屏幕底部120像素英雄每隔0.5秒发射一次子弹#xff0c;每次连发三枚子弹英雄默认不会移动#xff0c;需…目标设计英雄和子弹类使用pygame.key.get_pressed()移动英雄发射子弹1.设计英雄和子弹类1.1英雄需求游戏启动后英雄出现在屏幕的水平中间位置距离屏幕底部120像素英雄每隔0.5秒发射一次子弹每次连发三枚子弹英雄默认不会移动需要通过左/右方向键控制英雄在水平方向移动1.2子弹需求子弹从英雄的正上方发射沿直线向上方飞行飞出屏幕后需要从精灵组中删除Hero -- 英雄初始化方法指定英雄图片初始速度 0 -- 英雄默认静止不动定义bullets子弹精灵组保存子弹精灵重写update()方法英雄需要水平移动并且需要保证不能移出屏幕增加bullets属性记录所有子弹精灵增加fire方法用于发射子弹Bullet -- 子弹初始化方法指定子弹图片初始速度 -2 -- 子弹需要向上方飞行重写update()方法判断是否飞出屏幕如果是从精灵组删除2.创建英雄2.1准备英雄类分析在plane_sprites新建Hero类重写初始化方法直接指定图片名称并且将初始速度设置为0设置英雄的初始位置centerx x 0.5 * widthcentery y 0.5 * heightbottom y height 代码演示在plane_sprites.py中新建Hero类class Hero(GameSprite):英雄精灵def __init__(self):# 1.调用父类方法设置imagespeedsuper().__init__(./images/me1.png, 0)# 2.设置英雄的初始位置self.rect.centerx SCREEN_RECT.centerxself.rect.bottom SCREEN_RECT.bottom - 1202.2绘制英雄分析在__create_sprites添加英雄精灵和英雄精灵组后续要针对英雄做碰撞检测以及发射子弹所以英雄需要单独定义成属性在__update_sprites让英雄精灵组调用update和draw方法代码演示在plane_main.py中修改__create_sprites方法# 创建英雄的精灵和精灵组
self.hero Hero()
self.hero_group pygame.sprite.Group(self.hero)在plane_main.py中修改__update_sprites方法self.hero_group.update()
self.hero_group.draw(self.screen)3.移动英雄位置在pygame中针对键盘按键的捕获有两种方式第一种方式判断event.type pygame.KEYDOWN第二种方式首先使用pygame.key.get_pressed()返回所有按键元组通过键盘常量判断元组中某一个键是否被按下 -- 如果被按下对应数值为1请问这两种方式的区别第一种方式向右移动的按键如果被一直按下控制台只会输出一个 向右移动需要松开按键重新按下飞机才能持续向右移动elif event.type pygame.KEYDOWN and event.key pygame.K_RIGHT:print(向右移动...)第二种方式向右移动的按键如果被一直按下(按下不放控制台会输出多个 向右移动按键不需要松开飞机就可以持续向右移动# 使用键盘提供的方法获取键盘按键。返回所有按键的元组如果某个键被按下对应的值会是1
keys_pressed pygame.key.get_pressed()
# 判是否按下了方向键
if keys_pressed[pygame.K_RIGHT]:print(向右移动...)结论第一种方式event.type用户 必须要抬起按键才算一次 按键事件操作灵活性会大打折扣第二种方式用户可以按住方向键不放就能够实现持续向某一个方向移动了操作灵活性更好3.1移动英雄位置演练步骤在Hero类中重写update方法用速度speed和英雄rect.x进行叠加不需要调用父类方法 -- 父类方法只是实现了单纯的垂直运动在__event_handler方法中根据左右方向键设置英雄的速度向右 speed 2向左 speed -2其他 speed 0代码演练在Hero类重写update()方法根据速度水平移动英雄的飞机在plane_sprites.py的Hero类中重写update()方法def update(self):# 英雄在水平方向移动self.rect.x self.speed在plane_main.py的__event_handler方法中根据左右方向键设置英雄的速度# 使用键盘提供的方法获取键盘按键。返回所有按键的元组如果某个键被按下对应的值会是1
keys_pressed pygame.key.get_pressed()
# 判是否按下了方向键
if keys_pressed[pygame.K_RIGHT]:self.hero.speed 2
elif keys_pressed[pygame.K_LEFT]:self.hero.speed -2
else:self.hero.speed 03.2控制英雄运动边界在plane_sprites.py的Hero类的update()方法中判断英雄是否超出屏幕边界right x width利用right属性可以非常容易的针对右侧设置精灵位置代码演练在plane_sprites.py的Hero类的update()方法中判断英雄是否超出屏幕边界def update(self):# 英雄在水平方向移动self.rect.x self.speed# 控制英雄不能离开屏幕if self.rect.x 0:self.rect.x 0elif self.rect.right SCREEN_RECT.right:self.rect.right SCREEN_RECT.right4.发射子弹需求回顾 -- 英雄需求游戏启动后英雄出现在屏幕的水平中间位置距离屏幕底部120像素英雄每隔0.5秒发射一次子弹每次连发三枚子弹英雄默认不会移动需要通过左/右方向键控制英雄在水平方向移动4.1添加发射子弹事件分析pygame的定时器使用方法非常固定定义定时器常量 -- eventid在初始化方法中调用set_timer方法设置定时器事件在游戏循环中监听定时器事件代码演练在plane_sprites.py中的Hero类中定义fire方法def fire(self):print(发射子弹...)在plane_sprites.py中的顶部定义英雄发射子弹事件# 英雄发射子弹事件
HERO_FIRE_EVENT pygame.USEREVENT 1在plane_main.py中的PlaneGame类的__init__方法中修改定时器事件pygame.time.set_timer(HERO_FIRE_EVENT, 500)在plane_main.py中的PlaneGame类的__event_handler方法中让英雄发射子弹elif event.type HERO_FIRE_EVENT:self.hero.fire()4.2定义子弹类需求回顾 -- 子弹需求子弹从英雄的正上方发射沿直线向上方飞行飞出屏幕后需要从精灵组中删除Bullet -- 子弹初始化方法指定子弹图片初始速度 -2 -- 子弹需要向上方飞行重写update()方法判断是否飞出屏幕如果是从精灵组删除定义子弹类分析在plane_sprites.py新建Bullet继承自GameSprite重写初始化方法调用父类方法直接指定图片名称并且设置初始速度重写update()方法调用父类方法判断子弹飞出屏幕从精灵组删除代码演练class Bullet(GameSprite):子弹精灵def __init__(self):# 调用父类方法设置子弹图片设置初始速度super().__init__(./images/bullet1.png, -2)def update(self):# 调用父类方法让子弹沿着垂直方向飞行super().update()# 判断子弹是否飞出屏幕if self.rect.bottom 0:self.kill()4.3发射子弹演练步骤在Hero的初始化方法中创建子弹精灵组属性修改plane_main.py的__update_sprites方法让子弹精灵组调用update和draw方法实现fire()方法创建子弹精灵设置初始位置 -- 在英雄的正上方将子弹添加到精灵组代码实现初始化方法plane_sprites.py中的Hero类中修改初始化方法 # 3.创建子弹精灵组self.bullets pygame.sprite.Group()修改fire()方法plane_sprites.py中的Hero类中修改fire()方法def fire(self):print(发射子弹...)# 1.创建子弹精灵bullet Bullet()# 2.设置精灵位置,比英雄的y值小20个像素bullet.rect.bottom self.rect.y - 20bullet.rect.centerx self.rect.centerx# 3.将精灵添加到精灵组self.bullets.add(bullet)一次发射三枚子弹修改fire()方法plane_sprites.py中的Hero类中修改fire()方法,利用for循环def fire(self):print(发射子弹...)for i in (0, 1, 2):# 1.创建子弹精灵bullet Bullet()# 2.设置精灵位置,比英雄的y值小20个像素bullet.rect.bottom self.rect.y - i * 20bullet.rect.centerx self.rect.centerx# 3.将精灵添加到精灵组self.bullets.add(bullet)内容总结于:https://space.bilibili.com/37974444