毕竟我设法做到了,而且我已经为碰撞检测、/碰撞角度和其他附加内容编写了我的课程。
最令人困惑的过程可能是正确对齐位图以进行比较。当将一个movieclip draw() 转换成一个BitmapData 时,如果我们addChild() 对应的Bitmap 我们可以看到它的那部分是不可见的。它似乎只从中心向右和向下绘制,使顶部和左侧部分远离蜜蜂绘制。解决方案是在 draw 方法的第二个参数中给出一个变换矩阵,该矩阵对齐位图并使其全部被绘制。
这是我的类中创建用于比较的位图的函数示例:
static public function createAlignedBitmap(mc: MovieClip, mc_rect: Rectangle): BitmapData{
var mc_offset: Matrix;
var mc_bmd: BitmapData;
mc_offset = mc.transform.matrix;
mc_offset.tx = mc.x - mc_rect.x;
mc_offset.ty = mc.y - mc_rect.y;
mc_bmd = new BitmapData(mc_rect.width, mc_rect.height, true, 0);
mc_bmd.draw(mc, mc_offset);
return mc_bmd;
}
为了使用它,如果您在时间线上,请执行以下操作:
className.createAlignedBitmap(myMovieClip, myMovieClip.getBounds(this))
注意 getBounds 的使用,它返回嵌入影片剪辑的矩形。这允许计算偏移矩阵。
此方法与此处显示的方法非常相似http://www.mikechambers.com/blog/2009/06/24/using-bitmapdata-hittest-for-collision-detection/
顺便说一句,如果这对您来说很有趣,请查看我稍后会发布的另一个问题。