如何使用as3进行平滑移动?

时间:2011-11-09 07:44:40

标签: actionscript-3

我已经通过XML加载了一些图像并附加到名为mc0,mc1,mc2等的动态创建的MovieClip中。

_loader.removeEventListener(ProgressEvent.PROGRESS, onLoadingAction);
count++;
var img:Bitmap =  Bitmap(e.target.content);
img.cacheAsBitmap = true;
img.smoothing = true;
img.alpha = 0;
TweenLite.to(MovieClip(my_mc.getChildByName("mc"+count)).addChild(img),1, {alpha:1,ease:Quint.easeIn});

并在ENTER_FRAME处理程序

for (i=0; i < mc.numChildren; i++)
{   
    my_mc.getChildAt(i).x -= Math.round((mouseX-stage.stageWidth/2)*.006);              

}

Everthing工作正常。但它正在发抖,所以看起来不太好。

如何实现平稳运动?

2 个答案:

答案 0 :(得分:5)

我使用的一个解决方案是将(x,y)位置舍入到最接近的整数。无论你是否为你的位图添加了平滑并缓存它,圆角都可以使它感觉不那么波动并且更平滑。

您需要注意的另一件事是图像的尺寸。具有奇数尺寸的图像将不会像具有均匀尺寸的图像一样平滑。在我的博文Flash Smoothing Issue中查看如何解决此问题。

答案 1 :(得分:2)

由于Flash具有可变的帧速率(在某种意义上它会丢帧),因此不应该依赖于帧的输入作为一个动作单元。相反,明确计算经过时间会更明智。

例如,在输入框处理程序中:

var currentTime:Number = (new Date()).time;
for (i=0; i < mc.numChildren; i++)
{   
    my_mc.getChildAt(i).x -= speed * (currentTime - lastTime); // speed is in px/ms
}
lastTime = currentTime;

您在变量范围内声明变量lastTime

var lastTime:Number = (new Date()).time;

我不知道这是否解决了你所谓的“摇晃”,但至少要考虑一下。