0

我用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;
    }
4

1 回答 1

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 的最新版本支持这种形式的事件处理程序(不带事件参数),并且性能应该更高。如果您使用旧版本,您可以从事件对象的相应属性中获取经过的时间。

于 2013-02-05T21:19:10.947 回答