gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:53:42 26 4
gpt4 key购买 nike

我在这里,因为我目前正在为我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com