【发布时间】:2013-04-11 19:10:38
【问题描述】:
我正在绘制影片剪辑的位图,然后将其输入我的 hittest 函数以测试碰撞。但是,我不太确定如何添加到下面的代码中以考虑并为已缩放和/或旋转的电影剪辑绘制位图。下面的代码显然只适用于未转换的影片剪辑。我已经包含在我已经尝试过但没有成功的 cmets 代码中。
将绘制的位图添加到舞台时,无论是否转换相关的影片剪辑,绘制的位图都会被“截断”并错误地绘制 - 似乎只绘制了它的一部分。但是,这不会特别影响对未转换的动画剪辑的碰撞测试,但会对已转换的动画剪辑产生不利影响。
我想要绘制的所有动画剪辑都是通过 graphics 属性创建的。
//for example:
var mymc:MovieClip = new MovieClip();
var g:Graphics = mymc.graphics;
g.moveTo(0,0);
g.lineTo(17.5,0);
g.lineTo(8.75,17.5);
g.lineTo(-8.75,17.5);
g.lineTo(0,0);
主要代码:
for each(var mc:MovieClip in impassable) {
//var bMatrix:Matrix = new Matrix();
//bMatrix.scale(mc.scaleX, mc.scaleY);
//bMatrix.rotate(mc.rotation * (Math.PI/180));
var bData:BitmapData = new BitmapData(mc.width, mc.height, true, 0);
//bData.draw(mc, bMatrix);
bData.draw(mc);
var bitmap:Bitmap = new Bitmap(bData);
bitmap.x = mc.x;
bitmap.y = mc.y;
var HitTest:Number = newCollision(bitmap, centerX, centerY, 13.7);
有什么想法吗?谢谢
【问题讨论】:
-
有没有可能有一个你不改造的父MC,然后用draw()来绘制它的内容?
-
@amy。嗯,我之前尝试过,但它似乎只是从字面上删除了子 MC。我确定这可以通过 Matrix 完成,但我不确定如何。
-
我对@987654321@ 的回答有一个代码sn-p,它创建一个转换后的
DisplayObject的Bitmap克隆。听起来它可能会满足您的需求? (虽然显然你可以摆脱在舞台上定位Bitmap的额外步骤)。 -
@DavidMear 非常感谢您提供的深入而详尽的代码。这似乎正是制作转换后的影片剪辑的精确副本并正确对齐它所需要的。但是,尽管克隆正确,但位图似乎仍然无法与我的碰撞功能一起使用。无论如何,如果我无法弄清楚,那将是一个不同的问题。如果您将此放入答案中,我将接受此作为我的答案。谢谢!
-
太棒了!我已经发布了一个答案,但如果它仍然不起作用,如果您将碰撞功能添加到问题中,我会很感兴趣。如果您在我之前的回答中尝试使用该函数的第二个版本,它会重新缩放位图以取消舞台缩放,这可能会导致问题。
标签: actionscript-3 flash bitmapdata