从零开始学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 可以使用其它坐标为坦克绘制不同的上半部分和下半部分。