我用starling创建了一个基本的as3 web项目。所有iam正在创建一个简单的图像,并在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;
}
答案 0 :(得分:3)
那是因为每一帧的时间略有不同。要实现平滑动画,请使用passedTime参数声明onEnterFrame处理程序(存储自上一帧以来经过的时间)并使用此值移动对象,而不是假设每个帧将持续1 / frameRate秒。
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的最新版本支持这种形式的事件处理程序(没有事件参数),并且应该更高效。如果使用旧版本,则可以从事件对象的相应属性获取传递的时间。