当前位置: 首页 > news >正文

从零开始学Python游戏编程39-碰撞处理1

在《从零开始学Python游戏编程38-精灵5》代码的基础上,添加两个敌人的防御塔,玩家的坦克无法移动到防御塔所在的空格中,如图1所示。

图1 游戏中的碰撞处理

1 游戏中空格的坐标

在《从零开始学Python游戏编程36-精灵3》中提到,可以将游戏窗口看作是10行16列的空格,每个空格对应的横坐标是所在的列数,纵坐标是所在的行数,如图2所示。

图2 游戏窗口中空格的坐标

其中,玩家坦克的坐标是(5, 4),两个防御塔的坐标分别是(10,3)和(10, 5)。

2 为GameState类添加防御塔的坐标数据

GameState类表示游戏数据,因此要实现图1所示功能,首先要对GameState类添加防御塔的坐标数据。在该类的__init__()方法中添加如图3所示代码。

图3 防御塔坐标数据的代码

其中,tower1Pos和tower2Pos表示两个防御塔的坐标数据。

3  绘制完整的坦克

《从零开始学Python游戏编程38-精灵5》代码只绘制了玩家坦克的下半部分,而图1中所示是一个完整的坦克。完整坦克其实可以看作是图4中两个红框内容的组合,如图4所示。

图4 完整坦克示意图

在UserInterface类的render()方法中,使用图5所示的代码绘制完整的坦克。

图5 绘制完整坦克的代码

其中,第71-74行代码绘制坦克的下半部分,第72行中的Vector2(1,0)指的是图4中第1行第2列的内容;第75-58行代码绘制坦克的上半部分,第76行中的Vector2(0,6)指的是图4中第7行第1列的内容。通过以上代码绘制的完整坦克如图6所示。

图6 绘制的完整坦克

注意1 可以使用其它坐标为坦克绘制不同的上半部分和下半部分。

相关文章:

  • ESP-ADF esp_dispatcher组件之dispatcher介绍
  • RK3288 5.10内核无法点亮LVDS显示
  • Chrmo手动同步数据
  • 【软件工程】TCP三次握手中的SYN与ACK:核心机制详解
  • Vue3 上传后的文件智能预览(实战体会)
  • 如何申请游戏支付平台通道接口?
  • (六)机器学习---聚类与K-means
  • Python CT图像预处理——基于ITK-SNAP
  • 【DRAM存储器五十一】LPDDR5介绍--DFE与Pre-Emphasis
  • ⭐Unity_Demolition Media Hap (播放Hap格式视频 超16K大分辨率视频 流畅播放以及帧同步解决方案)
  • Spring-Cache替换Keys为Scan—负优化?
  • HTMLCSS模板实现水滴动画效果
  • 再谈String
  • Python的库
  • 【25软考网工】第三章(4)生成树协议、广播风暴和MAC地址表震荡
  • MySQL表达式之公用表表达式(CTE)的使用示例
  • Windows与CasaOS跨平台文件同步:SyncThing本地部署与同步配置流程
  • springboot2.x升级到3.x 惨痛经验总结
  • 告别 “幻觉” 回答:RAG 中知识库与生成模型的 7 种对齐策略
  • 力扣-hot100(找到字符串中的所有字母异位词)
  • 手机号旧机主信用卡欠款、新机主被催收骚扰四年,光大银行济南分行回应
  • 面对面倾听群众意见建议,及时回应解决群众“急难愁盼”问题!龚正在基层开展下访活动,调研城市更新
  • 印巴在克什米尔实控线附近小规模交火,巴防长发出“全面战争”警告
  • 人大法工委:涉核领域还需要有一部统领性的基础法律
  • 特朗普称已为俄乌问题设最后期限,届时美国态度或生变
  • 光线传媒:正与部分重点地区洽谈主题乐园合作,首款3A游戏预计三年左右推出