检查Pygam中是否有2个hitboxs\Rectangles重叠

2024-06-26 08:15:49 发布

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

在一个滚动游戏中,我必须在我的角色周围打框,一个在僵尸周围,一个在忍者周围。他们都跟随玩家,那就是寻找,现在我需要找出如何检查他们是否重叠,检查碰撞。你知道吗

我读过一些关于这个话题的其他问题,答案似乎不是我想要的。任何帮助都将不胜感激。谢谢!!!你知道吗

下面是我的代码的小版本:

class ninja(object):
    def __init__(self, x, y, ninjawidth, ninjaheight):
        self.x = x
        self.y = y
        self.ninjaheight = ninjaheight
        self.ninjawidth = ninjawidth
        self.hitbox = (self.x + 10, self.y + 10, self.ninjaheight - 10, self.ninjawidth - 10)
    def draw(self):
        mainninja.hitbox = (mainninja.x + 10, mainninja.y + 10, mainninja.ninjaheight - 15, mainninja.ninjawidth - 10)
        pygame.draw.rect(win, (255,0,0), mainninja.hitbox,2) #here is the hitbox


class zombie(object):
    def __init__(self, zombiewidth, zombieheight):
        self.x = winwidth
        self.y = 391
        self.height = zombieheight
        self.width = zombiewidth
    def draw(self):
        self.hitbox = (zombie.x + 55, zombie.y + 35, zombie.width - 55, zombie.height - 45)
        pygame.draw.rect(win, (255,0,0), zombie.hitbox, 2) #here is other hitbox


mainninja = ninja(60, 400, 192, 192)
zombie = zombie(192, 192)

我只需要一个代码或函数放在主循环中,检查僵尸和忍者命中框之间的冲突。你知道吗


Tags: 代码selfobjectinitdefclass僵尸draw
2条回答

.hitbox属性使用^{}对象。
注意:应该在类的方法中使用self属性,而不是全局命名空间变量mainninjazombie

class ninja(object):
    def __init__(self, x, y, ninjawidth, ninjaheight):
        self.x = x
        self.y = y
        self.ninjaheight = ninjaheight
        self.ninjawidth = ninjawidth
        self.hitbox = pygame.Rect(self.x + 10, self.y + 10, self.ninjaheight - 10, self.ninjawidth - 10)
    def draw(self):
        mainninja.hitbox = pygame.Rect(self.x + 10, self.y + 10, self.ninjaheight - 15, self.ninjawidth - 10)
        pygame.draw.rect(win, (255,0,0), mainninja.hitbox,2) #here is the hitbox


class zombie(object):
    def __init__(self, zombiewidth, zombieheight):
        self.x = winwidth
        self.y = 391
        self.height = zombieheight
        self.width = zombiewidth
        self.hitbox = pygame.Rect(self.x + 55, self.y + 35, self.width - 55, self.height - 45)
    def draw(self):
        self.hitbox = pygame.Rect(self.x + 55, self.y + 35, self.width - 55, self.height - 45)
        pygame.draw.rect(win, (255,0,0), self.hitbox, 2) #here is other hitbox

mainninja = ninja(60, 400, 192, 192)
zombie = zombie(192, 192)

然后可以使用^{}检查冲突:

if mainninja.hitbox.colliderect(zombie.hitbox):
    # [...]

相关问题 更多 >