0

嘿伙计们,所以我在试图弄清楚如何做到这一点时遇到了一些麻烦。我有一个名为 mcGoal_1 的影片剪辑对象,在它的类中,我使用 TweenLite 在舞台上垂直向上和向下补间。在 Level_1 上,它从底部开始,但是当 level_2 启动时,我希望它从顶部开始,但无法弄清楚如何更改每个级别的值来完成此操作。这是我用来从底部开始的代码:

private function init():void 
    {
        TweenMax.to(this, 4, { y:40, repeat: -1, yoyo:true, ease:Power0.easeInOut } );
        TweenLite.from(this, 2, {autoAlpha:0});       
    }

然后在我的引擎类中,我使用这段代码将它添加到舞台:

   mcGoal_1 = new goal_1();
stage.addChild(mcGoal_1);
mcGoal_1.x = (stage.stageWidth / 2) + 350;
mcGoal_1.y = (stage.stageHeight) - 35;

所以一切正常,但我想要完成的是在每个新关卡开始时改变 mcGoal_1 的位置。所以在 level_2 我希望我的 mcGoal_1 位置从顶部而不是底部开始,这是它从顶部开始的代码:

mcGoal_1 类:

private function init():void 
    {

        TweenMax.to(this, 2.8, { y:445, repeat: -1, yoyo:true, ease:Power0.easeInOut } );
        TweenLite.from(this, 2, {delay:2,autoAlpha:0}); 

    }

然后在引擎类中:

mcGoal_1 = new goal_1();
        mcGoal_1.x = (stage.stageWidth / 2) + 350;
        mcGoal_1.y = (stage.stageHeight) - 445;

所以现在它从顶部开始。

我现在的做法是创建多个 mcGoals。我每个级别都有一个新目标,所以现在我有大约 10 个目标的电影剪辑。但我想,如果我可以在每个新关卡中更改 mcGoal_1 的值,而不是从顶部而不是底部开始创建一个全新的影片剪辑,那会容易得多。我在想也许我只需要创建 2 个单独的函数 1 个函数用于从舞台顶部开始,另一个用于舞台底部。所以我会从我的 mcGoal_1 类中取出 Tweens 并将它们添加到引擎类中,以便我可以正确更改值?

像这样的东西可能在引擎类中:

Private Function startAtTop():void
    {
  mcGoal_1 = new goal_1();
        stage.addChild(mcGoal_1);
        mcGoal_1.x = (stage.stageWidth / 2) + 350;
        mcGoal_1.y = (stage.stageHeight) - 35;

  TweenMax.to(mcGoal_1, 4, { y:40, repeat: -1, yoyo:true, ease:Power0.easeInOut } );

    }




Private Function startAtBottom():void
{
  mcGoal_1 = new goal_1();
        mcGoal_1.x = (stage.stageWidth / 2) + 350;
        mcGoal_1.y = (stage.stageHeight) - 445;

 TweenMax.to(mcGoal_1, 2.8, { y:445, repeat: -1, yoyo:true, ease:Power0.easeInOut } );

}

然后我会调用每个新级别中的任何函数。虽然这并不奏效,因为该函数每秒每帧调用一次,这会导致 TweenLite 无法正常工作。

请任何帮助将不胜感激!

4

1 回答 1

1

据我所知,你只需要一堂课。你有一个 init 方法。您应该向 init 方法提供正确设置自身所需的信息。

目标:

private function init(startPosition:Point, endPosition:Point):void 
{
    this.x = startPosition.x;
    this.y = startPosition.y;
    TweenMax.to(this, 4, { y:endPosition.y, repeat: -1, yoyo:true, ease:Power0.easeInOut } );
    //you could use endPosition.x for a tween here as well
    TweenLite.from(this, 2, {autoAlpha:0});       
}

级别配置类:

package{
import flash.geom.Point;

public class LevelConfig {

    private var _startPosition:Point;
    private var _endPosition:Point;

    //add more properties

    public function LevelConfig(startPosition:Point, endPosition:Point) {
        this._startPosition = startPosition;
        this._endPosition = endPosition;
    }

    public function get endPosition():Point {
        return _endPosition;
    }

    public function set endPosition(value:Point):void {
        _endPosition = value;
    }
}
}

引擎:

function initLevels():void
{
    levels = new Vector.<LevelConfig>();
    levels.push(new LevelConfig(new Point((stage.stageWidth / 2) + 350,(stage.stageHeight) - 445),new Point((stage.stageWidth / 2) + 350,445));

    levels.push(new LevelConfig(new Point((stage.stageWidth / 2) + 350, 445),new Point((stage.stageWidth / 2) + 350,(stage.stageHeight) - 445));

    //add more levels
}

var levels:Vector.<LevelConfig>;
initLevels();

function startLevel(level:int):void
{
    var mcGoal:Goal = new Goal();
    var config:LevelConfig = levels[level];

    mcGoal.init(config.startPoint,config.endPoint);
}

那么您可以通过调用启动一个关卡startLevel(levelIndex) 您通常会从外部源加载关卡配置。XML 或 JSON 请注意 levelIndex 以 0 开头!所以您的级别 1 是 0。您还可以向此模型添加级别名称、描述和任何内容。

于 2013-05-27T17:53:36.667 回答