即使偏移量为零,也未检测到Pygame蒙版碰撞

问题描述 投票:1回答:1

我正在使用pygame编写游戏。滑雪者对象在x轴上左右移动,而树对象在y轴上向上移动屏幕。从提取的代码外部,将Tree类方法冲突称为传递对象树和滑雪者(即Tree.collide(tree,skier))。我修改了碰撞方法,以便它打印x和y偏移量以及是否满足碰撞测试(即ret_mask无)。将基础程序限制为一个滑雪者和一棵具有相同x坐标的树之后,我看到树直接穿过滑雪者,生成打印的offset_xoffset_y为零,但仍然得到ret_mask即使树木完全穿过滑雪者并沿y轴离开屏幕,也不会出现None的变化。查看一些较旧的代码,我尝试在加载PNG时添加.convert(),并设置colorkey(white)-如注释所示。但是,这没有区别。

对于为什么我没有发生碰撞的任何帮助,我们将不胜感激!

# Load Image PNGs
white=(255, 255, 255) #added definition of white
SKIER=pygame.image.load(os.path.join('assets','skier_img.png')).convert() #added .convert() to end
SKIER.set_colorkey(white) #added line
TREE=pygame.image.load(os.path.join('assets','tree_img.png')).convert() #added .convert() to end
SKIER.set_colorkey(white) #added line


# Define Object Classes
class Sprite:
    def __init__(self,x,y):
        self.x=x
        self.y=y
        self.img=None

class Skier(Sprite):
    def __init__(self,x,y):
        super().__init__(x,y)
        self.img=SKIER
        self.mask=pygame.mask.from_surface(self.img)

class Tree(Sprite):
    def __init__(self,x,y):
        super().__init__(x,y)
        self.img=TREE
        self.mask=pygame.mask.from_surface(self.img)

    def move(self,vel):
        self.y-=vel

    def collide(obj1,obj2):
        offset_x=obj2.x-obj1.x
        offset_y=obj2.y-obj1.y
        ret_mask=obj1.mask.overlap(obj2.mask,(offset_x,offset_y))
        if (obj1.mask.overlap(obj2.mask,(offset_x,offset_y)) != None):
            print('Collision Detected!')
        else:
            print(f'offset_x is {offset_x} and offset_y is {offset_y} and mask output is {ret_mask}')
python-3.x pygame collision mask
1个回答
0
投票

对不起大家!我解决了。实际上,我使用.convert()方法和set_colorkey(white)DID WORK采取的步骤。只是由于执行复制和粘贴操作,我的代码中出现错误:我在SKIER上两次设置了色键,而不是执行了TREE。另外,非常感谢Rabbid76正确地格式化了我问题中的代码,对于我急忙发布的内容表示抱歉。总的来说,在荣耀中掩盖自己是零分。...

© www.soinside.com 2019 - 2024. All rights reserved.