pygame 方向键、模拟摇杆

1,116 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情

image.png

pygame 方向键

方向键是游戏手柄上的一个小圆形或十字形按钮,用于通过按边缘(通常用拇指)来指示方向。如果你看一下方向键的下面,你会看到有四个开关排列在一个十字架上。当您向任何方向按动焊盘时,您还会按下其中一个或两个开关,这些开关是

解释为像光标键一样,给出八个方向。方向键可能是旧技术,但它们通常是某些游戏操作的最佳选择。我喜欢使用方向键来选择菜单,平移地图以及在平台游戏中跳来跳去。

Pygame将方向键称为“帽子”,因为操纵杆在操纵杆上具有类似方向键的控制。但是,就我们的目的而言,帽子和方向键是一回事。

当你按下方向键时,皮伽游戏会向你发送一个“快乐的动作”事件。此事件包含三个值:喜悦、帽子和价值。第一个是喜悦,是事件来自的操纵杆的索引;这是被按下的帽子的索引;和值指示它被按下的方式。hat 值实际上是 x 和 y 轴变化的元组 -负数表示左轴或下轴,正数表示向右或向上。

注意 D-pad 没有任何上下事件,因为当它被释放时,它会弹回到中间,并发送另一个 JOYHATMOTION 事件。

我们还可以绕过方向键的事件,并向 Pygame 询问方向键的当前状态。第一步是找出操纵杆有多少个方向键(可能没有),我们可以使用操纵杆对象的get_numhats成员功能来完成。然后,我们可以通过调用get_hat来获取每个 d-pad 的状态,该 d-pad 采用 hat 索引并返回轴元组。

这个元组与我们在清单 6-2 中创建的key_direction向量非常相似,我们可以通过从其值创建 Vector2 对象并规范化结果,非常方便地从中创建一个标题向量!清单 6-6 使用此方法在屏幕上滚动图像。

image.png

image.png

您可以在此代码中找到自己的地图。我建议进入谷歌搜索并输入“地图”。您可以找到一张漂亮的大型 2000 x 1000 或更大的地图来使用。越大越好。这应该给你一种感觉。您还可以搜索您喜欢的游戏的地图(如果有)。

模拟摇杆

所有现代游戏手柄都至少有一个模拟摇杆,它们就像弹簧安装的按钮,可以用拇指移动。与方向键相比,游戏玩家更喜欢这些,因为它们提供了更精细的控制,并且对于具有更高水平的真实感的游戏来说感觉更自然。Pygame将模拟摇杆视为两个单独的轴:一个用于x(左和右),一个用于y(上下)。单独处理它们的原因是相同的功能是用于可能只有一个轴的其他设备,尽管模拟摇杆是迄今为止最常见的。

模拟摇杆运动的事件是JOYAXISMOVEMENT,它提供了三条信息:喜悦,轴和价值。其中第一个是 joy,是操纵杆对象的 ID;轴是轴的索引;和值表示轴的当前位置,该位置在 1(左或下)和 +1(右或上)之间变化。

注意:y 轴始终跟在 x 轴之后,因此第一个摇杆使用轴索引 0 和 1。如果有第二个模拟摇杆可用,它将使用插槽 2 和 3。

除了 JOYAXISMOVEMENT 事件之外,您还可以从操纵杆对象获取任何轴的状态。使用get_numaxis查询操纵杆上的轴数,get_axis检索其当前值。让我们通过添加使用模拟摇杆滚动的功能(这使得更准确地平移图像)来扩展清单 6-6。清单 6-7 从 x 轴和 y 轴计算了一个附加向量,analog_scrol1。这个向量没有归一化,因为除了我们想要移动的方向之外,我们还将使用它来指示我们想要移动的速度。我们仍然需要乘以速度值,因为轴的范围从-1到+1,这将导致非常慢

image.png image.png

虽然清单 6-7 只是在屏幕上平移了一个图像,但它可能是策略或上帝游戏中滚动地图的基础。