我正在尝试使代码中的冲突检测正常工作。我正在使用矢量,我希望玩家精灵在与称为wall
的精灵组碰撞时碰撞并停止。问题是玩家可以通过底墙。
在这个例子中,我关闭了重力。
x冲突是可以的,但它有点滑稽,只有y方向不能正常工作与相同的代码。
我已经尝试使用调试器调试代码,但没有成功。
我主要感兴趣的是弄清楚为什么垂直碰撞检测不起作用,但我也希望得到关于水平碰撞检测的建议。
友情链接: 吉特哈布 : 完整代码
当前冲突检测代码:
def collide_with_walls(self, dir):
if dir == 'x':
hits = pg.sprite.spritecollide(self, self.game.walls, False)
if hits:
if self.pos.x > 0:
self.pos.x = hits[0].rect.left - self.rect.width
if self.pos.x < 0:
self.pos.x = hits[0].rect.right
self.rect.x = self.pos.x
if dir == 'y':
hits = pg.sprite.spritecollide(self, self.game.walls, False)
if hits:
if self.pos.y >= 0:
self.pos.y = Wall.rect.top - self.rect.height / 2
if self.pos.y < 0:
self.pos.y = hits[0].rect.bottom
self.rect.y = self.pos.y
据我所知,您的水平移动和碰撞检测工作正常。我再次启用了垂直运动,只需要修复一些东西Wall
必须更改为hits[0]
y速度必须设置为接触墙壁后的0。
def collide_with_walls(self, dir):
if dir == 'x':
hits = pg.sprite.spritecollide(self, self.game.walls, False)
if hits:
if self.pos.x > 0:
self.pos.x = hits[0].rect.left - self.rect.width
if self.pos.x < 0:
self.pos.x = hits[0].rect.right
self.rect.x = self.pos.x
if dir == 'y':
hits = pg.sprite.spritecollide(self, self.game.walls, False)
if hits:
if self.pos.y >= 0:
# `Wall` had to be changed to `hits[0]`.
self.pos.y = hits[0].rect.top - self.rect.height
if self.pos.y < 0:
self.pos.y = hits[0].rect.bottom
self.rect.y = self.pos.y
self.vel.y = 0 # Stop the player, otherwise he'll keep accelerating.
还有一个问题:如果玩家的精灵掉落的时间过长,它会加速并快速向下移动,从而跳过与墙的碰撞检测,只会掉进墙中。确保精灵不能跳过碰撞检测,要么限制它可能坠落的距离,给它一个最大速度,要么只是让墙加厚。您也可以使用光线投射,但实现起来要复杂一些。
当我尝试检测两个矩形之间的碰撞时当我启动程序时,它只打印“HIT”一次 我还尝试使用但出现此错误: 回溯(最近调用最后): 文件“D:/蟒蛇/PyCharm/test/src/Main/test.py”,第 104 行, 命中 = pygame.sprite.spritecollide(player_sprites,enemy_sprites,1) 文件“D:\程序\蟒蛇\lib\site-pac
我了解碰撞检测的基础,并开发了我自己的碰撞检测方法(据我所知)。然而,这似乎并不奏效。我所做的不是围绕精灵、形状和其他对象绘制完整的矩形,而是简单地在对象的所有边(左、右、上、下)绘制线条(非常细的矩形)。 在指定子画面的左侧、右侧、顶部和底部绘制细矩形的方法。这可能不是进行碰撞的最佳方式,但这就是我所拥有的,并且对所有想法和不同的解决方案持开放态度! 注:(int)(x-Game.getCame
碰撞检测 现在你知道了如何制造种类繁多的图形对象,但是你能用他们做什么?一个有趣的事情是利用它制作一个简单的 碰撞检测系统 。你可以用一个叫做:hitTestRectangle 的自定义的函数来检测两个矩形精灵是否接触。 hitTestRectangle(spriteOne, spriteTwo) 如果它们重叠, hitTestRectangle 会返回 true。你可以用 hitTestRect
本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 当试图判断两个物体之间是否有碰撞发生时,我们通常不使用物体本身的数据,因为这些物体常常会很复杂,这将导致碰撞检测变得很复杂。正因这一点,使用重叠在物体上的更简单的外形(通常有较简单明确的数学定义)来进行碰撞检测成为常用的方法。我们基于这些简单的外形来检测碰撞,这样代码会变得
所以我试图用Python和Pyplay创建一个益智平台游戏,但是我遇到了一点麻烦。当我为主要角色使用单点图像,而不是矩形图像时,如何制作碰撞检测器?我知道直角图像有左、右、顶部和底部像素功能(这对冲突检测非常有用),但是对于单片图像有这样的功能吗?或者我只需要为x和y坐标创建一个变量图像的宽度/高度?我试过用那个 但是catImg一直在通过窗户的尽头。我做错了什么?提前谢谢。
我正在尝试做一个平台游戏,其中没有斜坡。我正在尝试将碰撞检测降下来,但是我在pygame中找不到一种方法来获得哪一边与另一个Sprite发生了碰撞。有没有人能给我一个好的方法来做到这一点,那不是太庞大,但也能很好地工作在我的情况? 下面是我的玩家类: 我已经将它添加到我的player类中,每次播放器更新时我都运行它,并且它工作...差一点。 在平台顶部的碰撞起作用,在侧面的碰撞几乎总是起作用,除非