在Python游戏中模拟引力的示例

  介绍

小编给大家分享一下在Python游戏中模拟引力的示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

学习如何使用Python的Pygame模块编程电脑游戏,并开始操作引力。

真实的世界充满了运动和生活。物理学使得真实的生活如此忙碌和动态。物理学是物质在空间中运动的方式,既然一个电脑游戏世界没有物质,它也就没有物理学规律,使用游戏程序员不得不模拟物理学。

从大多数电脑游戏来说,这里基本上仅有两个方面的物理学是重要的:引力和碰撞。

当你添加一个敌人到你的游戏中时,你实现了一些碰撞检测,但是这篇文章要添加更多的东西,因为引力需要碰撞检测。想想为什么引力可能涉及碰撞。如果你不能想到任何原因,不要担心,它会随着你开发示例代码工作而且显然。

在真实世界中的引力是有质量的物体来相互吸引的倾向性。物体(质量)越大,它施加越大的引力作用。在电脑游戏物理学中,你不必创建质量足够大的物体来证明引力的正确;你可以在电脑游戏世界本身中仅编程一个物体落向假设的最大的对象的倾向。

添加一个引力函数

记住你的玩家已经有了一个决定动作的属性。使用这个属性来将玩家精灵拉向屏幕底部。

在Pygame中,较高的数字更接近屏幕的底部边缘。

在真实的世界中,引力影响一切。然而,在平台游戏中,引力是有选择性的,如果你添加引力到你的整个游戏世界,你的所有平台都将掉到地上。反之,你可以仅添加引力到你的玩家和敌人精灵中。

首先,在你的<代码> 类球员中添加一个重力<代码> 函数:

def 重力(自我):   ,,,self.movey  +=,, 3.2 #,玩家掉落的多快

这是一个简单的函数。首先,不管你的玩家是否想运动,你设置你的玩家垂直运动。也就是说,你已经编程你的玩家总是在下降。这基本上就是引力。

为使引力函数生效,你必须在你的主循环中调用它。这样,当每一个处理循环时,Python都应用下落运动到你的玩家。

在这代码中,添加第一行到你的循环中:

player.gravity(), #,检查引力   player.update才能()

启动你的游戏来看看会发生什么。要注意,因为它发生的很快:你是玩家从天空上下落,马上掉出了你的游戏屏幕。

你的引力模拟是工作的,但是,也许太好了。

作为一次试验,尝试更改你玩家下落的速度。

给引力添加一个地板

你的游戏没有办法发现你的角色掉落出世界的问题。在一些游戏中,如果一个玩家掉落出世界,该精灵被删除,并在某个新的位置重生。在另一些游戏中,玩家会丢失分数或一条生命。当一个玩家掉落出世界时,不管你想发生什么,你必须能够侦测出玩家何时消失在屏幕外。

在Python中,要检查一个条件,你可以使用一个如果语句。

你必需查看你玩家是否正在掉落,以及你的玩家掉落的程度。如果你的玩家掉落到屏幕的底部,那么你可以做一些事情。简化一下,设置玩家精灵的位置为底部边缘上方20像素。

使你的重力<代码> 函数看起来像这样:

,, def 重力(自我):   ,,,self.movey  +=,, 3.2 #,玩家掉落的多快   ,,,,   ,,,if  self.rect.y 祝辞,worldy 以及self.movey 祝辞=,0:   ,,,,,self.movey =0   ,,,,,self.rect.y =, worldy-ty

然后,启动你的游戏。你的精灵仍然下落,但是它停在屏幕的底部,不过,你也许不能看到你在地面层之上的精灵。一个简单的解决方法,是在精灵碰撞游戏世界的底部后,通过添加另一个泰到它的新Y位置,从而使你的精灵弹跳到更高处:

,, def 重力(自我):   ,,,self.movey  +=,, 3.2 #,玩家掉落的多快   ,,,,   ,,,if  self.rect.y 祝辞,worldy 以及self.movey 祝辞=,0:   ,,,,,self.movey =0   ,,,,,self.rect.y =, worldy-ty-ty

现在你的玩家在屏幕底部弹跳,恰好在你地面精灵上面。

你的玩家真正需要的是反抗引力的方法。引力问题是,你不能反抗它,除非你有一些东西来推开引力作用,因此,在接下来的文章中,你将添加地面和平台碰撞以及跳跃能力。在这期间,尝试应用引力到敌人精灵。

到目前为止,这里是全部的代码:

# !/usr/bin/env  python3   #,draw  a 世界   #,add  a  player 以及player 控制   #,add  player 运动   #,add 移动速度以及basic 碰撞   #,add 平台   #,add 重力   #,GNU  All-Permissive 许可证   #,Copying 以及distribution  of 却;能够文件,,with 或是without 修改,   #,断开连接;permitted  any 拷贝;medium  without  royalty  provided 从而版权   #,notice 以及却;能够notice 断开连接;保存只却;能够file  is  offered 按原样,   #,without  any 保修。   import  pygame   import 系统   import 操作系统   & # 39;& # 39;& # 39;   对象   & # 39;& # 39;& # 39;   class 平台(pygame.sprite.Sprite):   #,才能x 位置,y 位置,img 宽度,,img 身高,,img  file ,   def 才能;__init__(自我、xloc yloc、imgw imgh, img):   ,,,pygame.sprite.Sprite.__init__(自我)   ,,,self.image =, pygame.image.load (os.path.join(& # 39;图像# 39;,img)) .convert ()   ,,,self.image.convert_alpha ()   ,,,self.rect =, self.image.get_rect ()   ,,,self.rect.y =yloc   ,,,self.rect.x =xloc   class 球员(pygame.sprite.Sprite):   & # 39;才能& # 39;& # 39;   Spawn 才能;a 球员   & # 39;才能& # 39;& # 39;   def 才能__init__(自我):   ,,,pygame.sprite.Sprite.__init__(自我)   ,,,self.movex =0   ,,,self.movey =0   ,,,self.frame =0   ,,,self.health =10   ,,,self.score =1   ,,,self.images =, []   ,,,for 小姐:拷贝范围(9):   ,,,,,img =, pygame.image.load (os.path.join(& # 39;图像# 39;& # 39;英雄# 39;,+,str (i), +, & # 39; . png # 39;)) .convert ()   ,,,,,img.convert_alpha ()   ,,,,,img.set_colorkey(α)   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

在Python游戏中模拟引力的示例