我用starling创建了一个基本的as3 web项目。我所做的只是创建一个简单的图像,并在onEnterframe中沿x移动图像。但似乎动画/运动并不流畅,每隔几帧就会出现帧跳跃/生涩。下面是 onEnterFrame 和用于创建图像的测试函数。非常感谢对此的任何帮助。
private function onEnterFrame(e:Event):void
{
if(!img)
return;
img.x += 1;
if(img.x >= 960)
img.x = 0;
}
private function test():void
{
img = new Image(sAssets.getTextureAtlas("atlas").getTexture("flight_00"));
addChild(img);
img.x = 0;
img.y = 320;
}
这是因为每一帧的时间略有不同。若要实现平滑动画,请使用 passedTime 参数(存储自上一帧以来经过的时间)声明 onEnterFrame 处理程序,并使用此值移动对象,而不是假设每一帧将持续 1/帧速率秒。
private function onEnterFrame(passedTime:Number):void
{
if(!img)
return;
img.x += passedTime * 100; // speed is 100 px/sec
if(img.x >= 960)
img.x = 0;
}
注意:这种形式的事件处理程序(不带事件参数)在最新版本的 Starling 中受支持,并且应该性能更高。如果使用旧版本,则可以从事件对象的相应属性中获取传递的时间。