Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 即使偏移量为零,也未检测到Pygame掩码冲突_Python 3.x_Pygame_Collision_Mask - Fatal编程技术网

Python 3.x 即使偏移量为零,也未检测到Pygame掩码冲突

Python 3.x 即使偏移量为零,也未检测到Pygame掩码冲突,python-3.x,pygame,collision,mask,Python 3.x,Pygame,Collision,Mask,我正在用pygame编写一个游戏。滑雪者对象在x轴上左右移动,而树对象在y轴上向上移动。在提取的代码之外,树类方法collide被称为传递对象树和skier(即Tree.collide(Tree,skier))。我修改了碰撞方法,以便它打印x和y偏移以及是否满足碰撞测试(即是ret_masknone)。在将基础程序限制为一名滑雪者和一棵具有相同x坐标的树之后,我看到树正好穿过滑雪者,生成打印的offset_x和offset_y,为零,但是,即使树完全穿过滑雪者并在y轴上离开屏幕,仍然会得到一个r

我正在用pygame编写一个游戏。滑雪者对象在x轴上左右移动,而树对象在y轴上向上移动。在提取的代码之外,树类方法collide被称为传递对象树和skier(即
Tree.collide(Tree,skier)
)。我修改了碰撞方法,以便它打印x和y偏移以及是否满足碰撞测试(即是
ret_mask
none)。在将基础程序限制为一名滑雪者和一棵具有相同x坐标的树之后,我看到树正好穿过滑雪者,生成打印的
offset_x
offset_y
,为零,但是,即使树完全穿过滑雪者并在y轴上离开屏幕,仍然会得到一个
ret_mask
None
。查看一些较旧的代码,我尝试在加载PNG时添加
.convert()
,并设置
颜色键(白色)
——如注释所示。然而,这没有什么区别

任何关于我为什么没有得到很好的帮助

#加载图像PNG
白色=(255,255,255)#增加了白色的定义
SKIER=pygame.image.load(os.path.join('assets','SKIER_img.png')).convert()#将.convert()添加到末尾
滑雪者。设置颜色键(白色)#添加线条
TREE=pygame.image.load(os.path.join('assets','TREE_img.png')).convert()#将.convert()添加到末尾
滑雪者。设置颜色键(白色)#添加线条
#定义对象类
类精灵:
定义初始化(self,x,y):
self.x=x
self.y=y
self.img=None
滑雪运动员(雪碧):
定义初始化(self,x,y):
super().\uuuu init\uuuu(x,y)
self.img=滑雪者
self.mask=pygame.mask.from_surface(self.img)
类树(精灵):
定义初始化(self,x,y):
super().\uuuu init\uuuu(x,y)
self.img=树
self.mask=pygame.mask.from_surface(self.img)
def移动(自身、水平):
self.y-=vel
def碰撞(obj1、obj2):
偏移量_x=obj2.x-obj1.x
偏移量_y=obj2.y-obj1.y
ret_mask=obj1.mask.overlap(obj2.mask,(偏移量x,偏移量y))
如果(obj1.遮罩.重叠(obj2.遮罩,(偏移量x,偏移量y))!=无:
打印('检测到冲突!')
其他:
打印(f'offset_x为{offset_x},offset_y为{offset_y},掩码输出为{ret_mask})

对不起大家!我算出来了。 实际上,我使用.convert()方法和set_colorkey(白色)所采取的步骤确实有效。 我只是因为复制粘贴而在代码中出错:我在滑雪者身上设置了两次颜色键,而不是树。 另外,非常感谢Rabbid76,他正确地重新格式化了我问题中的代码-很抱歉,我发布得很匆忙。
总的来说,在荣耀中掩盖自己是零分….

对不起大家!我算出来了。 实际上,我使用.convert()方法和set_colorkey(白色)所采取的步骤确实有效。 我只是因为复制粘贴而在代码中出错:我在滑雪者身上设置了两次颜色键,而不是树。 另外,非常感谢Rabbid76,他正确地重新格式化了我问题中的代码-很抱歉,我发布得很匆忙。 总的来说,在荣耀中掩盖自己是零分