繁体   English   中英

python中的碰撞检测算法

[英]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

另请检查此库

http://lib2dp.sourceforge.net/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM