actionscript-3 - 针对 Sprite 的 AS3 透明 png 碰撞检测

标签 actionscript-3 flash bitmap collision-detection

我在这里,因为我目前正在为我的 AS3 应用程序进行碰撞检测。
我正在加载代表一个房间的位图 - 它有边界(墙壁),其余部分是透明的(地板)。然后我创建一个里面有一个圆圈的 Sprite 。

我希望我的 Sprite 在这些边界内移动并停在墙上,我能够实现背后的逻辑,我要求的是一种检测与墙壁碰撞的方法,我的整个房间都是一个位图,所以我猜我会检查与这个位图的碰撞,但不幸的是它也会计算透明部分。

我已经对此进行了谷歌研究,但我只发现非常复杂的系统无论如何都行不通。我这样做是出于学习目的,所以我想知道如何自己实现它。

因此,我问是否有人可以为我提供一段代码来检查位图的非透明部分是否发生碰撞? (或者我应该将这个 png 作为矢量加载?怎么做?)。

我也在旋转我的“圆圈”,所以我想这也应该考虑。我假设我应该做位图到位图检查而不是 Sprite 到位图?

我根本没有用于碰撞的工作代码,所以我不会提供任何代码。

我是否应该提供更多信息,请告诉我。

提前致谢!

@编辑

这是我的函数代码,它属于 Room Class。

public function detectCollisionWith(obj:Sprite):Boolean
    {
        var _bitmapData:BitmapData = new BitmapData(obj.width, obj.height, true, 0);
        _bitmapData.draw(obj);
        var _bitmap:Bitmap = new Bitmap(_bitmapData);
        if (_bitmapData.hitTest(new Point(_bitmap.x, _bitmap.y), 255, this.bitmap, new Point(this.x, this.y), 255))
            return true;
        return false;
    }

最佳答案

当它们都是位图时,您可以很容易地使用 BitmapData 进行检查。 hitTest() .

土坯 bitmapData hitTest() :

Performs pixel-level hit detection between one bitmap image and a point, rectangle, or other bitmap image. A hit is defined as an overlap of a point or rectangle over an opaque pixel, or two overlapping opaque pixels. No stretching, rotation, or other transformation of either object is considered when the hit test is performed.



现在是如何实现它的示例。如果你把你的 Sprite 变成位图:
var spriteBmd:BitmapData = new BitmapData( mySprite.width, mySprite.height, true, 0 );
spriteBmd.draw( mySprite ); //get the sprite asset
var spriteBitmap:Bitmap = new Bitmap( spriteBmd ); //create the bitmap to use

然后你可以运行 hitTest()针对两个位图,不考虑透明部分:
if ( spriteBitmap.bitmapData.hitTest( new Point( mySprite.x, mySprite.y ), 
     255, levelBitmap, new Point( levelBitmap.x, levelBitmap.y ), 255 ) ) {
    trace("Collision detected");
}

这仅检查位图的不透明部分是否发生冲突。您可以调整值 255在 if 语句中,如果您想增加允许检测的透明度。

关于actionscript-3 - 针对 Sprite 的 AS3 透明 png 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22350409/

相关文章:

apache-flex - 使用 services-config.xml 和未知的 context.root 编译 Flex 应用程序

flash - 为什么 Flash 使用 mask 对象的整个高度而不仅仅是可见区域?

actionscript-3 - 如何更改Flash CS6中文本输入的字体大小

flash - 如何将可变参数作为扩展列表传递给方法?

java - 复制现有的 png 文件并以编程方式重命名

actionscript-3 - 使用byteArray和Adobe Air生成x秒的静音音频文件

android - Adobe Air - 在没有使用权限的情况下检测应用程序是否在后台运行?

flash - as3 删除事件监听器不工作

Android:提高上传到服务器的图像质量

android - 如何绘制局部位图圆弧?就像一个圆形进度轮,但带有越来越多显示的位图。