0

私は学校のプロジェクトとして Flash で小さなゲームを作成しています。ムービー クリップが配置されたときに最初にトリガーされるのは onLoad 関数か、ENTER_FRAME イベントでしょうか。

どんな助けでも大歓迎です。

編集:オブジェクトがステージに置かれたときに実際には呼び出されないため、onLoad を削除しました。

var loaded:Boolean = false;
var angle:Number = 0; //in radians
this.addEventListener(Event.ENTER_FRAME, update);
function init():void {
    //get projectile position based on relation to mouse and spawning point.
    trace("init");
    loaded = true;
    this.angle = Math.atan2(mouseY - this.y, mouseX - this.x);
}
function update(e:Event):void {
    /* TRIG TIME! Move the object a certain amount
     * of pixels-- based on the delta, in the specified angle.
     */
    if (!loaded) {
        init();
    }
    trace("update");
    var slope:Number = Math.tan(angle);
}

ただし、この方法はおそらくまだ機能しません...

4

2 に答える 2

0

この場合、onLoad は期待どおりに機能していないようです。onLoad 関数を ADDED_TO_STAGE イベントに変更することでこれを解決しました。クラスのすべてのアクション スクリプト コードをフラッシュ ファイルから別のアクション スクリプト ファイルに移動し、イベント リスナーevent.ENTER_FRAMEevent.ADDED_TO_STAGEイベントをクラスのコンストラクターに配置すると、クラス全体が魅力的に機能するようになりました。

public function Projectile() {
    this.addEventListener(Event.ADDED_TO_STAGE, init);
    this.addEventListener(Event.ENTER_FRAME, update);
    super();
}

関数の更新前に関数 init が呼び出されたので、作業を続行できます。

このジレンマの解決を手伝ってくれたDonに感謝します

于 2013-03-10T16:51:42.127 に答える
0

actionscript 3 では、onLoad を使用せずにリスナーを追加する必要があるため、MovieClip.onLoad() の代わりに次のようにします。

MovieClip.addEventListener(Event.ADDED,mcLoaded);

function mcLoaded(e:Event):void {

trace("MovieClip added.");

}

尋ねられた質問に関しては、ADDED / ADDED_TO_STAGE は ENTER_FRAME の前に実行されます。

このソリューションはタイムライン コード用です (個別の .as ファイルではありません。OP には他のケースのソリューションがあります。)

于 2013-03-10T16:54:23.663 に答える