【问题标题】:How to make Flixel ignore transparent images when overlapping?如何让 Flixel 在重叠时忽略透明图像?
【发布时间】:2012-05-11 01:37:31
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么不使用 Illustrator 或 Fireworks 等提供矢量的程序?

标签: actionscript transparency collision-detection flixel


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2011-03-22
      • 2018-08-21
      • 2012-11-20
      • 2013-09-27
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多