精灵随机移动与碰撞Python

2024-06-03 01:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用pygame中的python制作一个pacman风格的游戏。目前,我正在创造鬼怪,帕克曼必须避开迷宫。我已经创建了这些,并尝试添加随机移动碰撞检测,这样它们就可以绕过迷宫,而不仅仅是整个屏幕。这些怪物的密码是咆哮的。我的问题是Monster似乎有点跳来跳去,几乎不动,我怎么才能像吃豆人的鬼魂一样顺利地穿过迷宫呢?非常感谢任何帮助。在


Tags: 游戏密码屏幕风格pacmanpygame迷宫鬼魂
1条回答
网友
1楼 · 发布于 2024-06-03 01:16:41

我无法在我的计算机上测试您的代码,因为某些原因,python返回了一些错误。但是让我来分析一下你的代码。在

问题似乎来自这两条线:

self.rect.x += random.randint(-1,1)
self.rect.y += random.randint(-1,1)

它们位于update(self)函数的下面。在

因为你设置你的怪物“更新”每次屏幕刷新,你的怪物将移动一个像素随机上,下,左或右每次你调用更新。你的“update”函数每次调用一个从-1到1的随机数。所以,你的怪物要么移动+1或0或-1像素,每一个屏幕刷新垂直和水平。结果,它们看起来摇摆不定,根本不动。在

你想要一个平稳的移动是为了你的“更新”功能移动你的怪物在一个单一的恒定的方向。在

我不确定你游戏的最佳方式,但我建议如下:(我的代码只是一个指南,它们可能包含错误)

给怪物类一个名为“dir”的变量或属性,代表方向。在开始你的类时,给“dir”一个从1到4的随机值(代表上、下、左和右)

self.dir = random.randint(1,4)

然后,在“update(self)”函数中,编写如下if语句:

^{pr2}$

这样,你的怪物一次只能向一个方向上下左右移动。在

有了这个,我想你也必须修改你的“检查碰撞”代码。让你的代码改变怪物的方向,这取决于它击中了墙的哪一部分。在

希望这有帮助!:)

编辑:

你的第二个问题是你的怪物没有正确地碰撞墙壁。这是您的代码:

^{3}$

我觉得奇怪的是你根据怪物的位置来检查它的方向。以if self.rect.x > -1:为例。"self.rect.x"实际上是怪物的x坐标。所以这根本不能指示怪物的方向。所以我不认为你可以在你的if语句中使用self.rect.x或{}来进行冲突。在

相反,考虑使用我刚才推荐的“dir”。 我给你换第一行,剩下的你来做。在

if self.dir == 4: # Moving right; Hit the left side of the wall
self.rect.right = wall.rect.left

在那之后,你的怪物会停止,因为它会再次尝试向同一方向移动,但是这个代码会阻止它。所以,你必须再次随机改变它的方向。只要确保它不再选择同一个方向。我暂时把这个问题留给你。在

编辑2:

你提到你的碰撞不适用于顶部和底部。在

我花了一段时间才知道你的错误所在;)

if self.dir == 1: #Moving up
    self.rect.y+=2;

if self.dir == 2: #Moving down
    self.rect.y-=2;

我想你把你的y+=2y=-2互换了。所以你们的上下运动是互换的。在

相关问题 更多 >