- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里,因为我目前正在为我的 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.
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/
我是一名优秀的程序员,十分优秀!