我使用Photoshop,一堆墙和门创建了一组静态对象,并使背景透明。 bunchOfWalls
图片的大小与我的地图相同(600x600x)。
所以,当我做FlxU.overlap(bunchOfWalls, myHero, heroHitWalls);
时,这个函数会触发Hero所做的每一个动作,因为它会在用图像的透明区域检测到的每个碰撞时触发。这意味着Hero无法移动,因为图像层位于地图图层本身的顶部,并且它具有相同的大小(均为600x600)。
有没有办法让Flixel忽略我bunchOfWalls
图像的透明区域,还是有另一种方法可以达到同样的效果?
答案 0 :(得分:3)
每个Flx对象都有一个边界框,这是一个用于确定碰撞的矩形。内置的FlxG.collide()
& FlxG.overlap()
函数仅检查对象的边界框是否相交。不考虑透明度。
那你怎么解决这个问题呢?你可以......
1)将背景图像分割成没有透明度的墙块。然后你可以继续使用Flixel的碰撞方法。
2)使用像素完美的碰撞方法,将透明度考虑在内。我是Flixel Power Tools的忠实粉丝 - 它是一个插件,包含许多有用的功能,其中一个是像素完美碰撞。它真的很容易使用,在你的情况下,它可能看起来像这样:
if (FlxCollision.pixelPerfectCheck(bunchOfWalls, myHero))
{
heroHitWalls();
}
答案 1 :(得分:0)
使用flixel的另一个不错的选择是为你的墙创建FlxTilemap
而不是一个大的精灵。与@ WgFunstorm的第一个建议相同的基本原则;将墙壁分成几部分并根据这些部分发生碰撞。