1

这是我使用 AS3 所做的:

var BGround1:Background=new Background();
var BGround2:Background= Background();
stage.addChild(BGround1);
stage.addChild(BGround2);
addEventListener(Event.ENTER_FRAME, moveScroll, false, 0, true);

function moveScroll(e:Event): void
{

     BGround1.x -= scrollSpeed; 
     BGround2.x -= scrollSpeed; 
     if(BGround1.x <= -BGround1.width)
     {
           BGround1.x =BGround2.x + BGround2.width;
     }
     else if(BGround2.x <= -BGround2.width)
     {
           BGround2.x = BGround1.x + BGround1.width;
     }

}

但是,如果我设置scrollSpeed得太高,则运动不流畅。有什么方法可以制作流畅的动画吗?提前致谢。

4

2 回答 2

2

Hungry Hero游戏具有流畅的无限滚动背景,并且没有框架限制。该游戏是开源的,作者有这个视频教程,解释了他是如何实现你所需要的。

基本上每个背景层都有一个滚动速度parallaxDepth(实现视差效果),还有一个变量来控制整体滚动速度_speed(因为英雄喝咖啡,滚动速度增加)。

这是部分代码,但我建议观看他的视频教程并在 Github 上浏览源代码。

// overall speed
var _speed = 1;

bgLayer1 = new BgLayer(1);
bgLayer1.parallaxDepth = 0.02;
this.addChild(bgLayer1);

bgLayer3 = new BgLayer(3);
bgLayer3.parallaxDepth = 0.5;
this.addChild(bgLayer3);

private function onEnterFrame(event:Event):void
{
    // Background 1 - Sky
    bgLayer1.x -= Math.ceil(_speed * bgLayer1.parallaxDepth);
    // Hero flying left
    if (bgLayer1.x > 0) bgLayer1.x = -stage.stageWidth;
    // Hero flying right
    if (bgLayer1.x < -stage.stageWidth ) bgLayer1.x = 0;


    // Background 3 - Buildings
    bgLayer3.x -= Math.ceil(_speed * bgLayer3.parallaxDepth);
    // Hero flying left
    if (bgLayer3.x > 0) bgLayer3.x = -stage.stageWidth;
    // Hero flying right
    if (bgLayer3.x < -stage.stageWidth ) bgLayer3.x = 0;    
}
于 2013-11-21T00:04:56.000 回答
1

如果您需要在更短的时间内进一步移动背景(这就是您的 scrollSpeed 正在更改的内容),那么您只有 2 个选择:

1)以更大的块移动背景区域(这将获得您所描述的生涩效果)。
2) 更频繁地以更小的块移动。

鉴于您的代码是框架绑定的,因此更频繁地移动的唯一方法是增加帧速率(只能在一定程度上完成)。如果您的应用程序已经以低于设定的帧速率运行,那么您需要查看原因,以及您可以做些什么来改进它(位图缓存?Stage3D?)

之后,您将进入超出此问题范围的运动效果(例如运动模糊)领域。

于 2013-11-11T23:05:05.957 回答