我用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的第一个建议相同的基本原则;将墙壁分解成部分,并根据这些部分进行碰撞。