一起来学习如何使用Python的Pygame模块来对游戏进行编程并操纵重力。
我们的现实生活中充满了运动和生命。物理让我们的世界变得如此繁忙和生动。 同时我们要知道,物理阐释了物质在空间中移动的方式。 不过呢,因为我们的游戏世界本不存在物理,所以作为游戏程序员,我们必须在游戏中模拟物理。
对于大多数游戏而言,我们基本上关注的是两种物理现象:重力和碰撞。
你在向游戏中添加敌方目标时,通常会实现一些碰撞检测,但是由于重力同样涉及到碰撞检测,因此本文会对此作出更多解释。 让我们来思考一下,为什么重力会涉及到碰撞呢?如果你还没有头绪,也没关系,我们处理示例代码时,这个问题会很清晰明了。
现实中重力的本质是物体相互吸引的一个过程。物体越大,其重力也就越大。在游戏物理学中,您不必为了证明引力的合理性而去相应地去创建一个质量数据; 您只需编程一种趋势,就可以让物体掉落到游戏世界中最大的物体:世界。
添加重力函数
请记住,您的Player已经具有确定运动的属性。 使用此属性将播放器拉向屏幕底部。
在Pygame中,较高的数字更靠近屏幕的底部边缘。
在现实世界中,重力会影响所有物体。 但在游戏中,重力是有选择的——如果你将重力添加到整个游戏世界中,则所有物体都会掉落到地面。 相反,你也可以仅将重力添加到玩家和敌人上.
首先,在您的Player选项中添加重力功能:def gravity(self):
self.movey += 3.2 # how fast player falls
这是一个基本的功能。 首先,无论玩家是否要运动,都将其设置为垂直运动。 换句话说,你已将玩家编程为始终处于下降状态—— 这基本上是重力的基础。
为了使重力函数起作用,我们必须在主循环中调用它。 这样,Python每个时间点都会向玩家施加一次下降运动。
这段代码,将第一行添加到循环中:player.gravity() # check gravity
player.update()
启动游戏,看看会发生什么。 看起来很突然,因为它发生得很快:您的玩家从游戏屏幕掉向了天空。
这说明你的重力模拟生效了,不过好像效果好过了头。
后续调试中,你可以更改玩家下降的速率。
添加地面
角色之所以会掉出世界,是因为游戏无法检测到他。 在某些游戏中,如果玩家掉没了,角色将被删除并在出生点重新生成。 在有些其他游戏中,玩家会失去分数或生命。 无论如何当角色掉出世界的时候,你必须用某种方法来检测角色是否掉出了屏幕之外。
在Python中,要检完成这类检测,可以使用if语句。
您必须检查查看您的玩家是否掉落以及掉了多远。如果您的玩家跌落到可以到达屏幕底部的程度,则可以执行某些操作。 为简单起见,请将玩家的位置设置为底部边缘上方20像素。
你的重力函数应该长这样。。:def gravity(self):
self.movey += 3.2 # how fast player falls
if self.rect.y > worldy and self.movey >= 0:
self.movey = 0
self.rect.y = worldy-ty
然后启动您的游戏。虽然您的玩家仍会掉落,但会停在屏幕底部。不过,您可能看不到位于地面层后面的目标。一个简单的解决方法是在达到世界的最低点后通过在新的位置添加另一个 -ty 来使得目标弹跳得更高:def gravity(self):
self.movey += 3.2 # how fast player falls
if self.rect.y > worldy and self.movey >= 0:
self.movey = 0
self.rect.y = worldy