1

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

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

有什么方法可以让 Flixel 忽略我bunchOfWalls图像的透明区域,还是有其他方法可以达到同样的效果?

4

2 回答 2

3

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

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

1) 将背景图像拆分成不透明的墙块。然后就可以继续使用 Flixel 的碰撞方法了。

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

if (FlxCollision.pixelPerfectCheck(bunchOfWalls, myHero))
{
    heroHitWalls();
}
于 2012-05-01T16:14:32.317 回答
0

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

于 2012-05-02T03:33:16.873 回答