我在这里,因为我目前正在为我的AS3应用程序碰撞检测而苦苦挣扎。 我正在加载一个位图,代表一个房间 - 它有边界(墙),其余部分是透明的(地板)。然后我创建一个带有圆圈的精灵。AS3透明PNG碰撞检测针对精灵
我希望我的精灵在这些边界内移动并停在墙上,我能够实现逻辑后面的逻辑,我要求的是一种检测与墙壁碰撞的方法,我的整个房间是一个位图,所以我猜想我只是检查与该位图的冲突,但不幸的是,它也计数透明部分。
我已经做了一个谷歌的研究,但我只发现非常复杂的系统,无论如何不会工作。我正在学习目的,所以我想知道如何自己实现它。
因此,我问是否有人可以提供一段代码,只检查我的位图的非透明部分的碰撞? (或者我应该加载这个PNG作为矢量?怎么做?)。
我也在旋转我的“圈子”,所以我想这也应该考虑。我认为我应该做位图检查位图而不是精灵位图?
我没有碰撞的工作代码,所以我不会提供任何。
我应该提供更多信息,请告诉我。
提前致谢!
@EDIT
这是代码,我有我的功能,它属于房类。
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;
}
好吧,这看起来很简单,但有一件事让我感到困惑,但为什么我需要传递这些位图的x和y?这是否意味着它只测试1点(像素),我需要遍历两个位图的所有点? – user1970395
不,你不需要发送所有的点,只是位图的x和y。这些点只是告诉它从哪里开始,哪里结束,如果你传递了显示对象,算法将通过它们各自的边界进行筛选。或者,您可以将他们左上角的点传递给底部右边界。 –
好吧,我会给它一个去,并带回一些结果(希望积极)。性能如何?对于巨大的位图(我将拥有大约5000 x 5000“房间”png)它会不会显着影响它。 – user1970395