0

タイムラインと実際に統合する必要のあるActionscript (この場合、特定のシーケンスで発生する必要のある一連のフレームを制御する)を作成する必要があり、何をすべきかを理解しようとしています。

最初の数フレームには、「next_1」ボタンがあります。

フレーム10で、別のボタン「next_2」が必要です。私は本当にこのボタンがフレーム1にないようにする必要があります(おそらくそれを非表示にすることもできますが、それは私が望まないクリック可能な領域を作成することになります)。

問題は、「frame_1」に付けないものはすべて、Documentクラスでnullとしてレンダリングされることです。

これに対する解決策はありますか?可能であれば、タイムラインにスクリプトを書く必要はありません(長期的には、ドキュメントクラスにスクリプトを保持する方が簡単なようです)...

4

2 に答える 2

1

タイムライン上のアイテムはその場で作成されるため、再生ヘッドがフレーム 10 に達していない場合、next_2 は作成されません。

最も簡単なドキュメント クラスのソリューション:

  1. ["label1", "label2"] のようなフレーム ラベルの配列を作成します。
  2. sectionIndex var を作成し、0 に設定します。
  3. 独自のレイヤーに次のボタンを作成して、常に表示されるようにします。
  4. 次のボタンがクリックされると、sectionIndex をインクリメントしてから gotoAndPlay(myLabels[sectionIndex])
于 2012-04-26T18:30:19.523 に答える
0

さて、「Real WorldFlashGameDevelopment」から直接解除されました。

/**************************************************
* FRAME LABELS *
**************************************************/
private function enumerateFrameLabels():void {
   for each (var label:FrameLabel in currentLabels) {
       addFrameScript(label.frame-1, dispatchFrameEvent);
   }
}

private function dispatchFrameEvent():void {
   dispatchEvent(new Event(currentLabel, true));
}

これにより、タイムラインの各フレームラベルにイベントがディスパッチされます。

次に、フレームごとにイベントリスナーを追加できます。

addEventListener("name_of_my_framelabel", frameHandler);
addEventListener("another_framelabel", frameHandler);

また、ボタンが実際にタイムラインに表示されたときに、ボタンのイベントリスナーを追加するswitchステートメントを記述します。

private function frameHandler(e:Event):void {
            switch(e.type) {
                case 'screen_2':
                    stop();
                    next_2.addEventListener(MouseEvent.CLICK, click2, false, 0, true)
                break;
            }
        }
于 2012-04-26T18:42:49.903 に答える