小学生python游戏编程arcade----原码分析
物理引擎
self.physics_engine = arcade.PhysicsEnginePlatformer(

我们正在发送我们的 SpriteList 对于玩家应该碰撞到的东西 walls 物理引擎的参数。正如我们将在后面的章节中看到的,Platform物理引擎有一个 platforms 和 walls 参数。这两者之间的区别非常重要。静态不移动精灵列表应始终发送到 walls 参数,并且移动的精灵应发送到 platforms 参数。确保您做到这一点将对性能有极大的好处。

通过添加静态精灵 platforms 参数大致是一个O(N)运算,这意味着随着您添加更多的精灵,性能将线性下降。如果将静态精灵添加到 walls 参数,那么它几乎是O(1),并且例如100个和50,000个不移动的精灵之间基本上没有区别。

我们还在这里看到了一些与我们的 Scene 对象。您可以像访问Python词典一样访问场景,以便从中获取SpriteList。有多种方法可以访问场景中的SpriteList,但这是最简单、最直接的方法。

class PhysicsEngineSimple:"""Simplistic physics engine for use in games without gravity, such as top-downgames. It is easier to getstarted with this engine than more sophisticated engines like PyMunk.:param Sprite player_sprite: The moving sprite:param  Union[SpriteList, Iterable[SpriteList] walls: The sprites it can't move through.This can be one or multiple spritelists."""def __init__(self, player_sprite: Sprite, walls: Union[SpriteList, Iterable[SpriteList]]):"""Create a simple physics engine."""assert isinstance(player_sprite, Sprite)if walls:if isinstance(walls, SpriteList):self.walls = [walls]else:self.walls = list(walls)else:self.walls = []self.player_sprite = player_spritedef update(self):"""Move everything and resolve collisions.:Returns: SpriteList with all sprites contacted. Empty list if no sprites."""return _move_sprite(self.player_sprite, self.walls, ramp_up=False)

第二种引

class PhysicsEnginePlatformer:"""Simplistic physics engine for use in a platformer. It is easier to getstarted with this engine than more sophisticated engines like PyMunk.**Note:** Sending static sprites to the ``walls`` parameter and moving sprites to the``platforms`` parameter will have very extreme benefits to performance.**Note:** This engine will automatically move any Sprites sent to the ``platforms``parameter between a ``boundary_top`` and ``boundary_bottom`` or a ``boundary_left``and ``boundary_right`` attribute of the Sprite. You need only set an initial``change_x`` or ``change_y`` on it.:param Sprite player_sprite: The moving sprite:param Optional[Union[SpriteList, Iterable[SpriteList]]] platforms: Sprites the player can't move through.This value should only be used for moving Sprites. Static sprites should be sent to the ``walls`` parameter.:param float gravity_constant: Downward acceleration per frame:param Optional[Union[SpriteList, Iterable[SpriteList]]] ladders: Ladders the user can climb on:param Optional[Union[SpriteList, Iterable[SpriteList]]] walls: Sprites the player can't move through.This value should only be used for static Sprites. Moving sprites should be sent to the ``platforms`` parameter."""def __init__(self,player_sprite: Sprite,platforms: Optional[Union[SpriteList, Iterable[SpriteList]]] = None,gravity_constant: float = 0.5,ladders: Optional[Union[SpriteList, Iterable[SpriteList]]] = None,walls: Optional[Union[SpriteList, Iterable[SpriteList]]] = None,):"""Create a physics engine for a platformer."""self.ladders: Optional[List[SpriteList]]self.platforms: List[SpriteList]self.walls: List[SpriteList]if ladders:if isinstance(ladders, SpriteList):self.ladders = [ladders]else:self.ladders = list(ladders)else:self.ladders = Noneif platforms:if isinstance(platforms, SpriteList):self.platforms = [platforms]else:self.platforms = list(platforms)else:self.platforms = []if walls:if isinstance(walls, SpriteList):self.walls = [walls]else:self.walls = list(walls)else:self.walls = []self.player_sprite: Sprite = player_spriteself.gravity_constant: float = gravity_constantself.jumps_since_ground: int = 0self.allowed_jumps: int = 1self.allow_multi_jump: bool = False

小学生python游戏编程arcade----原码分析相关推荐

  1. 小学生python游戏编程arcade----烟花粒子

    小学生python游戏编程arcade----烟花粒子 前言 烟花粒子 1.Vector向量类 1.1 arcade中的向量类 1.2 应用 2.绘制粒子所有纹理图片 2.1 给定直径和颜色的圆的纹理 ...

  2. 小学生python游戏编程arcade----可旋转的坦克的发射子弹

    小学生python游戏编程arcade----可旋转的坦克的发射子弹 前言 小学生python游戏编程arcade----可旋转坦克的发射子弹 1.可旋转坦克的发射子弹 1.1 子弹的类 1.2 发射 ...

  3. 小学生python游戏编程arcade----动画图片实现爆炸效果

    小学生python游戏编程arcade----动画图片实现爆炸效果 前言 动画图片实现爆炸效果 1.爆炸类的的实现 1.1爆炸图片 1.2 类的定义 1.3 爆炸类的引用 1.4 爆炸类的更新 1.5 ...

  4. 小学生python游戏编程arcade----excel调用

    小学生python游戏编程arcade----excel调用 前言 小学生python游戏编程arcade----excel调用 1.excel文件 1.1 excel表头 1.2 excel文件 1 ...

  5. 小学生python游戏编程arcade----爆炸粒子类

    小学生python游戏编程arcade----爆炸粒子类 前言 1.1 参数设置 粒子加速下降的速度.如果不需要,则为0 粒子退出的速度 粒子移动的速度.范围为2.5<-->5,设置为2. ...

  6. 小学生python游戏编程arcade----基本知识1

    小学生python游戏编程arcade----基本知识 前言 基本知识 1.简单窗体 2.试着添加角色及背景 3.场景 4.角色控制及物理引擎 总结 源码获取 前言 前面章节分享试用了pyzero,p ...

  7. 小学生python游戏编程arcade----敌人自动面向角色并开火

    小学生python游戏编程arcade----敌人自动面向角色并开火 前言 敌人自动攻击角色的实现 1. 1.1 计算角度,使用敌人面向角色 1.2 自动生成各色子弹,不是通过调用图片 1.3 控制敌 ...

  8. 小学生python游戏编程arcade----灯光示例

    小学生python游戏编程arcade----灯光示例 前言 灯光阴影效果 1.灯光效果 1.1 玩家灯光效果 1.2 代码 2.灯光效果 2.1 软效果 2.2码实现 3.硬效果 3.1 灯光硬效果 ...

  9. 小学生python游戏编程arcade----坦克大战2

    小学生python游戏编程arcade----坦克大战2 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.提示框制作 1.1养眼绿色 1.2 画距形提示框 1.3 效果图 1.4 ...

最新文章

  1. 电子工程师必须掌握的20个模拟电路
  2. [code]代码格式1
  3. 闭环思维之follow through和及时反馈
  4. 笔记-项目采购管理-采购管理过程(具体过程)
  5. 惜缘-致家乡的一位女孩[原创]
  6. HDFS dfsclient写文件过程 源码分析
  7. ES6中的常用知识点总结
  8. Python——内置类型
  9. 此更新不适用你的计算机
  10. Java三大框架SSH简介
  11. 百度杯全国网络攻防大赛——初来乍到
  12. java 100以内的偶数的和_java 2.3 循环语句计算100以内的偶数和(五种方法)
  13. 使用Ballerina CLI工具开发Ballerina项目
  14. SNP基因数据质控调研
  15. 菏泽学院计算机学院康鸿雁,菏泽学院在山东省大学生软件设计大赛中获佳绩
  16. 微软宣布任命前MOTO亚太总裁梁念坚为中国区CEO
  17. meta http-equiv=refresh content=0; url=是什么意思
  18. 2020京东春招笔试题目
  19. JUST技术:当我停留时我在干什么
  20. CentOS 5.5 install Tomcat 6

热门文章

  1. asp.net 将中文汉字转换为英文首字母和将汉字转换为拼音全拼
  2. Android文字环绕效果
  3. 请编程输出如下规律的N*N方阵。*UUUUUUUU*L*UUUUUU*RLL*UUUU*RRLLL*UU*RRRLLLL**RRRRLLLL**RRRRLLL*D
  4. AWE开幕在即,腾讯叮当将携智能朋友圈亮相
  5. 关于鲁大师安装后篡改chrome主页的问题
  6. 将最小特权原则应用到Windows XP用户帐户
  7. Nature 重磅: 3D 人类皮层类器官(hCO) 与在体鼠脑的成功融合!- MedChemExpress
  8. 使用 SSH 登陆谷歌云 root 或者 普通账户的方法
  9. 通过char[]获得字符串new String(chars) || chars.toString() || String.valueOf(chars)对比
  10. Android 中的“64k”问题和分包