2024-06-03 01:16:41 发布
网友
我正在用pygame中的python制作一个pacman风格的游戏。目前,我正在创造鬼怪,帕克曼必须避开迷宫。我已经创建了这些,并尝试添加随机移动碰撞检测,这样它们就可以绕过迷宫,而不仅仅是整个屏幕。这些怪物的密码是咆哮的。我的问题是Monster似乎有点跳来跳去,几乎不动,我怎么才能像吃豆人的鬼魂一样顺利地穿过迷宫呢?非常感谢任何帮助。在
Monster
我无法在我的计算机上测试您的代码,因为某些原因,python返回了一些错误。但是让我来分析一下你的代码。在
问题似乎来自这两条线:
self.rect.x += random.randint(-1,1) self.rect.y += random.randint(-1,1)
它们位于update(self)函数的下面。在
update(self)
因为你设置你的怪物“更新”每次屏幕刷新,你的怪物将移动一个像素随机上,下,左或右每次你调用更新。你的“update”函数每次调用一个从-1到1的随机数。所以,你的怪物要么移动+1或0或-1像素,每一个屏幕刷新垂直和水平。结果,它们看起来摇摆不定,根本不动。在
你想要一个平稳的移动是为了你的“更新”功能移动你的怪物在一个单一的恒定的方向。在
我不确定你游戏的最佳方式,但我建议如下:(我的代码只是一个指南,它们可能包含错误)
给怪物类一个名为“dir”的变量或属性,代表方向。在开始你的类时,给“dir”一个从1到4的随机值(代表上、下、左和右)
self.dir = random.randint(1,4)
然后,在“update(self)”函数中,编写如下if语句:
if
这样,你的怪物一次只能向一个方向上下左右移动。在
有了这个,我想你也必须修改你的“检查碰撞”代码。让你的代码改变怪物的方向,这取决于它击中了墙的哪一部分。在
希望这有帮助!:)
编辑:
你的第二个问题是你的怪物没有正确地碰撞墙壁。这是您的代码:
我觉得奇怪的是你根据怪物的位置来检查它的方向。以if self.rect.x > -1:为例。"self.rect.x"实际上是怪物的x坐标。所以这根本不能指示怪物的方向。所以我不认为你可以在你的if语句中使用self.rect.x或{}来进行冲突。在
if self.rect.x > -1:
"self.rect.x"
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+=2和y=-2互换了。所以你们的上下运动是互换的。在
y+=2
y=-2
我无法在我的计算机上测试您的代码,因为某些原因,python返回了一些错误。但是让我来分析一下你的代码。在
问题似乎来自这两条线:
它们位于
update(self)
函数的下面。在因为你设置你的怪物“更新”每次屏幕刷新,你的怪物将移动一个像素随机上,下,左或右每次你调用更新。你的“update”函数每次调用一个从-1到1的随机数。所以,你的怪物要么移动+1或0或-1像素,每一个屏幕刷新垂直和水平。结果,它们看起来摇摆不定,根本不动。在
你想要一个平稳的移动是为了你的“更新”功能移动你的怪物在一个单一的恒定的方向。在
我不确定你游戏的最佳方式,但我建议如下:(我的代码只是一个指南,它们可能包含错误)
给怪物类一个名为“dir”的变量或属性,代表方向。在开始你的类时,给“dir”一个从1到4的随机值(代表上、下、左和右)
self.dir = random.randint(1,4)
然后,在“update(self)”函数中,编写如下
^{pr2}$if
语句:这样,你的怪物一次只能向一个方向上下左右移动。在
有了这个,我想你也必须修改你的“检查碰撞”代码。让你的代码改变怪物的方向,这取决于它击中了墙的哪一部分。在
希望这有帮助!:)
编辑:
你的第二个问题是你的怪物没有正确地碰撞墙壁。这是您的代码:
^{3}$我觉得奇怪的是你根据怪物的位置来检查它的方向。以}来进行冲突。在
if self.rect.x > -1:
为例。"self.rect.x"
实际上是怪物的x坐标。所以这根本不能指示怪物的方向。所以我不认为你可以在你的if
语句中使用self.rect.x
或{相反,考虑使用我刚才推荐的“dir”。 我给你换第一行,剩下的你来做。在
在那之后,你的怪物会停止,因为它会再次尝试向同一方向移动,但是这个代码会阻止它。所以,你必须再次随机改变它的方向。只要确保它不再选择同一个方向。我暂时把这个问题留给你。在
编辑2:
你提到你的碰撞不适用于顶部和底部。在
我花了一段时间才知道你的错误所在;)
我想你把你的
y+=2
和y=-2
互换了。所以你们的上下运动是互换的。在相关问题 更多 >
编程相关推荐