[英]Collision detection algorithm in python
我正在写一个小游戏,包括一个迷宫,一个玩家角色和一定数量的敌人。 PC和敌人都属于一个给定的类,它们根据我指定的标准每几毫秒更新一次它们的移动。 (所有这些限制都是作业的一部分)。 现在,我正在尝试编写一个标准,以便敌人和PC都不会移动到迷宫墙所占据的方格。 为此,我使用了以下方法(所有这些都在我正在制作的Game类中):
def isNotWall(self,x,y):
self.wallXI = 0
self.wallXF = 0
self.wallYI = 0
self.wallYF = 0
for wall in self.wallList:
self.wallXI = wall[0]*self.grid + 1
self.wallXF = (wall[0]+1)*self.grid
self.wallYI = wall[1]*self.grid + 1
self.wallYF = (wall[1]+1)*self.grid
if self.wallXI < x < self.wallXF and self.wallYI < y < self.wallYF:
return False
return True
其中wallList是包含数组坐标中每个墙的x和y坐标的列表,而grid是每个网格方块的大小(在这种情况下为32像素)。
现在,举一个我如何实现这个的例子:
if snake[1] > self.heroe_x:
if self.isNotWall(snake[1] - 30,snake[2]):
snake[1] = snake[1] - 30 * segundos
其中snake [1]是以像素为单位的x坐标,snake [2]是y,而segundos是经过了多少毫秒,因此敌人将移动适当数量的像素。
据此,如果蛇(和角色)在运动结束时的位置被墙壁占据,则蛇(和角色)不应朝某个方向移动。 然而,这只能部分起作用,行为不稳定,有些墙只能在一个方向上工作,而且角色经常卡在墙内或无缘无故地停止冷。
任何帮助修复这些缺陷将不胜感激。 我意识到这个问题不是很简洁,但由于我对语言缺乏经验,我想不出一种方法可以使问题更具体,而且以前的答案都没有帮助我。 提前致谢!
如果你只检查最后的位置,如果挡路的话蛇就不会撞到墙上。 说距离蛇只有15平方的墙?
此外,蛇正在移动30 * segundos,但你只是检查是否有30平方米的墙
if snake[1] > self.heroe_x:
next_position_x = snake[1] - (30 * segundos)
if self.isNotWall(next_position_x,snake[2]):
snake[1] = next_position_x
如果我是你,我会实现一个真正的路径寻找算法,并使墙壁成本无限,以便它永远不会越过一个。
http://en.wikipedia.org/wiki/Pathfinding
另请检查此库
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.