繁体   English   中英

Movieclip-> BitmapData和原点

[英]Movieclip -> BitmapData and origin

我试图将MovieClip绘制到BitmapData上,以使其看起来与我完成addChild(movieclip)时完全相同。

我似乎无法弄清楚我需要使用哪种魔术公式将动画保持在原点附近。

这是相关的代码位:

private function update(e:Event):void
{
    var bounds:Rectangle = movieClip.getBounds(movieClip);
    bitmapData = new BitmapData(maxMCwidth, maxMCheight, true, 0x0);
    bitmapData.draw(movieClip, new Matrix(1, 0, 0, 1, maxMCwidth - (bounds.x + bounds.width), maxMCheight - (bounds.y + bounds.height)));
    bitmap.bitmapData = bitmapData;
}

完整代码在这里: http//pastebin.com/KyU5FPeJ

结果是这样的:

http://www.swfcabin.com/open/1339173476

顶部动画是使用addChild(mc)完成的。 底部的动画是使用bitmapData.draw完成的。 请注意,在底部版本中,右侧的剑如何不会水平移动。 几乎就像整个动画都在右对齐一样。

这也是我的flashdevelop项目的链接,其中包含完整的代码,以防万一有人想玩它: https ://www.dropbox.com/s/gvt4scknqdian2a/bitmapdatadrawing.zip

我只希望两个版本看起来相同。 我需要更改我的bitmapData绘图代码才能实现此目的?

好吧,我想通了!

问题的原因是我没有正确计算maxMCwidth或maxMCheight。 我正在通过动画片段寻找最宽/最高的单帧。 但是没有考虑跨帧的边界位置会发生变化。 为了获得整个动画的实际最大宽度/高度,我使用了以下代码:

maxBounds = new Rectangle();
for (var i:uint = 0; i < movieClip.totalFrames; i++)
{
    var tempBounds:Rectangle = movieClip.getBounds(movieClip);
    maxBounds = maxBounds.union(tempBounds); 
    movieClip.nextFrame();
}

然后,这使我可以修复翻译矩阵:

bitmapData.draw(movieClip, new Matrix(1, 0, 0, 1, -maxBounds.x, -maxBounds.y));

像这样,它适用于我测试过的每个动画。

好的,因为您没有提供主要的mxml,所以我无法运行您的项目。
但是,我认为我找到了您的问题。
我认为getBounds不会返回您认为是的值。
我看不到骨架swc,但我感觉其中有物体位于屏幕顶部或底部,并且编码方式会导致其缩小以使其适合。
getBounds可能会将其添加到高度中。

bitmapData = new BitmapData(movieClip.width, movieClip.height, true, 0x0);
bitmapData.draw(movieClip, new Matrix(1, 0, 0, 1, movieClip.width/2, movieClip.height/2 )); 
bitmap = new Bitmap(bitmapData);
bitmap.x = 70;
bitmap.y = 200;

在这里记住未经测试的代码。 :(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM