晚上好!我正在使用Pygame中的Surface.get_at()函数,通过角色坐标来检查玩家是否处于可行走的表面上。我选择黑色(0, 0, 0)作为行走表面,但有时Pygame会返回颜色(1, 0, 0),因此,玩家无法站在该表面上。是否有一种方法可以使用一系列数字作为整数,以便任何接近黑色的颜色都可以用作行走表面?是否有更简单的方法来实现这一点?以下是我正在开发的程序部分:
groundcolor = disp.get_at((int(playerx), int(playery)-1))
if groundcolor == black1 or groundcolor == black0:
groundlim = int(playery)
print(groundcolor)
if groundcolor != black1 and groundcolor != black0:
groundlim = 695
if playery != 695:
jumping = True
print(groundcolor)
注意:black1是(1,0,0),而black0是(0,0,0)。我这样做只是为了尝试解决我的问题,但是有太多接近黑色的颜色不能全部定义。
除了我提出的问题之外,如果您有其他建议,将不胜感激。谢谢您抽出时间阅读。
get_at
函数变得非常低效,这甚至在文档中都有说明。我建议使用 masks,我会更新答案并展示使用 masks 的例子。 - The Big Kahunapygame.image.load
加载了png图像,它将返回一个surface,然后你可以使用它来创建掩码。就像上面的例子一样,你可以使用pygame.mask.from_threshold(image, (0,0,0), (0.9, 0.9, 0.9))
。这将创建一个与图像大小相同的掩码,碰撞区域为任何90%以上为黑色的像素。然后,如果你想创建更多的平台,你可以更新你的图片或在pygame中绘制。 - The Big Kahuna