如何让 Flixel 在重叠时忽略透明图像



我用Photoshop创建了一组静态对象,一堆墙壁和大门,并使背景透明。bunchOfWalls图像的大小与我的地图相同(600x600x)。

因此,当我执行FlxU.overlap(bunchOfWalls, myHero, heroHitWalls);时,此功能会随着英雄的每次移动而触发,因为它会在检测到图像透明区域的每次碰撞时触发。这意味着英雄无法移动,因为图像图层位于地图图层本身的顶部,并且具有相同的大小(均为 600x600)。

有没有办法让Flixel忽略我bunchOfWalls图像的透明区域,或者有没有其他方法可以达到相同的效果?

每个 Flx 对象都有一个边界框,这是一个用于确定碰撞的矩形。内置的 FlxG.collide() & FlxG.overlap() 函数仅检查对象的边界框是否相交。不考虑透明度。

那么如何解决这个问题呢?你可以...

1)将背景图像拆分为没有透明度的墙块。然后你可以继续使用 Flixel 的碰撞方法。

2) 使用考虑透明度的像素完美碰撞方法。我是 Flixel 电动工具的忠实粉丝 - 它是一个插件,包含许多有用的功能,其中之一是像素完美碰撞。它真的很容易使用,在您的情况下,它可能看起来像这样:

if (FlxCollision.pixelPerfectCheck(bunchOfWalls, myHero))
{
    heroHitWalls();
}

使用 flixel 的另一个不错的选择是为墙壁创建一个FlxTilemap,而不是一个单一的大精灵。与@WgFunstorm的第一个建议相同的基本原则;将墙壁分解成部分,并根据这些部分进行碰撞。

最新更新