当前位置: 首页 > 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(找到字符串中的所有字母异位词)
  • 世界第一爆冷出局,双打均剩独苗,新周期国乒考验从双打开始
  • 从马相伯到谢希德:复旦大学校长传记系列再版首发
  • 凤阳鼓楼脱落瓦片2023年刚经历修复,凤阳县文旅局长回应是否违建等焦点问题
  • 巴基斯坦外长访华是否与印巴局势有关?外交部:此访体现巴方高度重视中巴关系
  • 牛市早报|上市公司重大资产重组新规出炉,4月经济数据将公布
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开“无条件谈判”