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 つの個別の関数を作成する必要があるのではないかと考えていました。それで、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

私が見る限り、必要なクラスは 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});       
}

LevelConfig クラス:

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 に答える