作者:还在琢磨 
来源:CSDN 
原文:https://blog.csdn.net/mbl114/article/details/78075095 
版权声明:本文为博主原创文章,转载请附上博文链接!

我们现在编写子弹类,我们设计子弹为了通用一点,敌人飞机向下发射子弹,英雄飞机向屏幕上方发射子弹,那我们就在创建子弹的时候,设置传递一个参数,根据参数来选择子的子弹的图片和子弹移动的方向。

这里注意一点,pygame.image.load()图片之后,我们可以通过图片对象的get_rect()方法来获得图片的矩形(矩形应该包括该图片在窗口里的x和y坐标,以及其宽和高),但是矩形的x和y坐标始终是(0,0,width,height), 需要我们通过move_ip来保证图片绘制的位置和具体的rect记录的位置保持一致。
---------------------

# 子弹
class Bullet(object):# 初始化子弹def __init__(self, scene, enemy=False):# 子弹移动速度self.speed = 2# 是否是敌人子弹self.is_enemy = enemy# 子弹资源if self.is_enemy:# 加载敌人子弹图片self.image = pygame.image.load("./res/bullet_1.png")# 设置子弹移动方向self.speed = self.speedelse:# 加载英雄子弹图片self.image = pygame.image.load("./res/bullet_11.png")# 设置子弹移动方向self.speed = -self.speed# 子弹是否可见self.visible = False# 持有主场景对象self.main_scene = scene# 获得子弹矩形(x, y, width, height)self.rect = self.image.get_rect()# 设置子弹位置def set_pos(self, x, y):self.rect[0] = xself.rect[1] = y# 设置子弹速度def set_speed(self, speed):if self.is_enemy:self.speed = speedelse:self.speed = -speed# 子弹移动def action(self):if not self.visible:return# 假设飞机矩形为plane_rect(10, 20, 200, 300)# plane_rect.move_ip(10, 20), 那么结果是plane_rect(20, 40, 200, 300)# 也就是原矩形x和y坐标加上move_ip函数x和y坐标,就是当前矩形新位置self.rect.move_ip(0, self.speed)# 如果子弹超出场景范围,则设置为不可见if self.rect[1] < 0 or self.rect[1] > self.main_scene.size[1]:self.visible = False# 绘制子弹def draw(self):if not self.visible:returnself.main_scene.scene.blit(self.image, (self.rect[0], self.rect[1]))

子弹在超出屏幕之后,我们不再计算和绘制子弹。下面我们创建一颗子弹,来测试下是否能正常从我们指定的位置开始飞行:

# 主场景添加如下代码
class MainScene(object):# 初始化主场景def __init__(self):# 地图对象self.map = GameBackground(self)# 测试子弹对象self.bullet = Bullet(self)self.bullet.visible = Trueself.bullet.set_pos(200, 700)# 绘制def draw_elements(self):# 绘制地图self.map.draw()# 移动子弹self.bullet.draw()# 动作def action_elements(self):# 计算坐标地图self.map.action()# 计算子弹坐标self.bullet.action()

注:

可以在里面添加子弹的各个分选条目,例如:简单的飞机,速度低,方向向下,稍微高级的,速度快点,再高级的,速度高,方向可以有角度,BOSS的话就更复杂了。设置各个分支,创建飞机时,可以选择这些分支的子弹。也可以随机选择,游戏多样化。后期添加 角度,攻击力 ,图片等参数。

一直想不通,为什么python  没有switch,非要用一连串的 if elif elif 来判断。

转载:python中的pygame编写飞机大战(三) 子弹类的实现相关推荐

  1. 转载:python中的pygame编写飞机大战(一)游戏框架搭建

    作者:还在琢磨  来源:CSDN  原文:https://blog.csdn.net/mbl114/article/details/78074742  版权声明:本文为博主原创文章,转载请附上博文链接 ...

  2. QT飞机大战三(子弹类)

    前文链接如下所示 QT飞机大战一(游戏场景配置) QT飞机大战二(飞机类) 如图所示,子弹会不断从飞机的位置射出来 那么子弹这个类肯定有自己的位置坐标 肯定有自己的资源图片 既然子弹需要"射 ...

  3. Python游戏之Pygame——太空飞机大战(三)

    上一篇(Python游戏之Pygame--太空飞机大战(二))完成了敌机类以及敌机坠毁时释放包裹类,这一篇将给出英雄战机类和处理.由于英雄战机是由游戏者操控的,所以要处理操控事件,比如往那个方向飞,发 ...

  4. Python游戏之Pygame——太空飞机大战(四)

    上一篇(Python游戏之Pygame--太空飞机大战(三))完成了英雄战机和星空,那么基本上飞机大战的主要元素都已经完成,该是总结成功玩自己游戏的时候了. 哦,差点忘了,Bullet类对于普通子弹和 ...

  5. Python游戏之Pygame——太空飞机大战(二)

    上一篇(Python游戏之Pygame--太空飞机大战(一))文章简单对游戏进行了说明,给出了部分配置文件以及子弹类.下面给出敌机类和方法. 大家直到,飞机必须能非,最好能非直线飞行.因此必须有X_s ...

  6. Python游戏之Pygame——太空飞机大战(一)

    学习Python,最好的办法是实战,实战!我们知道,有无数的先人和大侠提供了非常多的软件包供我们选用.有时候学习是一件很枯燥的事,玩游戏就不一样了.我们玩的最多的游戏是别人开发的,能不能开发出一款自己 ...

  7. pygame之飞机大战 sprite精灵类实现源代码和资源下载链接

    用pygame的sprite 重写了飞机大战 实现功能: 英雄机:按住按键连续发射 子弹:各种子弹,静态的,动态的,不同的子弹不同的伤害. 发射方式:花样的发射方式,单.双.三.45度--,各种发射方 ...

  8. 手把手教你使用Pygame制作飞机大战小游戏,4万字超详细讲解!

    点击上方"早起Python",关注并"星标" 每日接收原创Python干货! 大家好,偷学Python系列是由小甜同学从初学者的角度学习Python的笔记,其特 ...

  9. 手把手教学,Python 游戏编程之实现飞机大战(含源代码)

    文章目录 一.游戏设定 1.游戏界面展示和设定 二.实现过程 1.我方飞机 2.敌方飞机 3.定义武器 4.武器补充库 5.主模块 总结: 前言 我想大家都是有玩过类似飞机大战的射击类游戏,也享受目标 ...

最新文章

  1. np.array_split可以不均等划分 np.split为均等划分
  2. char几个字节java_java中的char占几个字节实例分析
  3. python中列表的sort方法_python中列表的sort方法使用详解
  4. Windows静态库和动态库的调用方法汇总
  5. RedisCacheManager设置Value序列化器技巧
  6. 《转》通往高级工程师的道路
  7. [CareerCup] 7.6 The Line Passes the Most Number of Points 经过最多点的直线
  8. 【CVRP】基于matlab遗传算法求解带容量的车辆路径规划问题【含Matlab源码 162期】
  9. 一文看懂有刷电机与无刷电机的工作原理及区别
  10. 第十三届“认证杯”数学中国数学建模比赛赛后体会
  11. 快速跳转到行首/行尾 快捷键
  12. hotmail手机端_hotmail邮箱官方版|hotmail邮箱手机版下载_v7.8.2_9ht安卓下载
  13. 综合布线施工工艺--
  14. chrome必备插件
  15. Ionic2升级到Ionic3
  16. 一串数字怎么拆分成单个数字
  17. 国内链改思路是什么?
  18. chrome主页被垃圾软件篡改为hao123后最小白的修复方法
  19. “看得到的解说”上线 咪咕视频智能字幕带来暖心陪伴
  20. 单反镜头上的参数具体意义

热门文章

  1. 深度好文:Linux系统内存知识
  2. 解析csv数据绘制曲线图
  3. 反向延长线段什么意思_关于线段的延长线的概念教学反思
  4. SSM毕业设计-基于SSM的个人相册管理系统
  5. stm32f407 st-link v2的正确使用
  6. linux小白工具,一个小工具(setup),小白也能独立管理自己的Linux服务器
  7. 服务器硬件规格常用查看命令——网卡相关命令
  8. 草图 UI 转 HTML 代码,微软开源Sketch2Code
  9. matlab 内存拷贝_Matlab内存不足问题的解决
  10. 如果你想来金融科技公司……