AS3:フレームスクリプトからリンケージされたASファイルのメソッドを呼べる

2008/08/21

こんにちは。
私には2歳の子供がいます。おとといはうちの子がよその子を、昨日はよその子がうちの子を、喧嘩してガブっと噛んでしましました。この年齢はまだうまく自分の感情を言葉で伝えることができないらしく、よくやってしまいます。
それで思ったんですが、人間の持っている本能的な攻撃手段は、殴るでも蹴るでもデコピンでもなく、「噛む」ということなんですね。いや、やっぱり人間も動物だ。

さて、ASの話です。今、久し振りにAS3のお仕事をしています。以前にもあったんですが、「gotoAndStopなどのフレーム移動した直後にタイムライン上のMCがASから取得できない」という状態がありました。それで、Event.RENDERとかなんとかいろいろやれないかと悩んだんですが、結局タイムライン上のスクリプトから呼び出せば確実に取得できるという事実だけはありました。

今回その方法をもう少し模索したところ発見しました。って、みんな知ってたらごめんなさい。
AS2からAS3に移行してきた私にとって、「フレーム移動→なんかやる」という順番が普通だったもので、それができるようになったので、小躍りしてしまいました。

MCのフレームスクリプトで、リンケージしているASのメソッドをそのままかけばいい。
それだけです。いや、何でこんな単純なことに気がつかなかったんだろ?

package
{
  import fl.transitions.easing.Regular;
  import fl.transitions.Tween;
  import flash.display.MovieClip;
  import flash.events.Event;
  import flash.events.MouseEvent;

  public class AddMC extends MovieClip
  {
    public var innerMC_A:MovieClip;
    public var innerMC_B:MovieClip;
    public var innerMC_C:MovieClip;

    public function AddMC()
    {
    }

    private function initialize():void
    {
      trace("initializeだよ");
    }

    private function scriptA():void
    {
      trace("フレームAです。");
      var t:Tween = new Tween(innerMC_A, "x", Regular.easeOut, 50, 200, 0.8, true);
    }

    private function scriptB():void
    {
      trace("フレームBです。");
      var t:Tween = new Tween(innerMC_B, "y", Regular.easeOut, 0, 150, 0.8, true);
    }

    private function scriptC():void
    {
      trace("フレームCです。");
      var t:Tween = new Tween(innerMC_C, "x", Regular.easeOut, 200, 0, 0.8, true);
    }
  }

}

こんなクラスとひもづけているAddMCのタイムライン上で、

scriptA();

とか書いてやると、普通にASのメソッドが呼ばれます。タイムラインから呼んでいるので、タイムライン上のMCもすでにASから取得できる状態です。
このままだとプログラムの流れ的には、ASだけで完結できないのでもし気になる方は、AddFrameScriptなどを使って、上の階層からひもづけてやればできのではないでしょうか?たぶん、、。

あと、ドキュメントクラスも書いておきます。

package
{
  import flash.display.MovieClip;
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.MouseEvent;

  public class Main extends Sprite
  {
    public var selectButtonA:MovieClip;
    public var selectButtonB:MovieClip;
    public var selectButtonC:MovieClip;
    private var addMC:MovieClip

    public function Main()
    {
      addMC = new AddMC();
      this.addChild(addMC);
      addMC.stop();
      addButtonListener();
    }

    private function addButtonListener():void
    {
      selectButtonA.addEventListener(MouseEvent.MOUSE_DOWN, selectButtonHandler);
      selectButtonB.addEventListener(MouseEvent.MOUSE_DOWN, selectButtonHandler);
      selectButtonC.addEventListener(MouseEvent.MOUSE_DOWN, selectButtonHandler);
    }

    private function selectButtonHandler(e:MouseEvent):void
    {
      var selectButton:MovieClip = e.currentTarget as MovieClip;
      var labelStr:String = selectButton.name.substr("selectButton".length);
      addMC.gotoAndStop(labelStr);
    }
  }

}

今回はflaファイルとASファイルの関係が密接だと思うので、データを一式固めておきました。興味のある方はどうぞ。
→ダウンロード


自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る