2007.10.15

Flash作成の心得2

前回、FlashとデータであるXMLを分離することで後々便利になると書きました。
Flash作成の心得1
ではActionScriptでXMLの取り込み方について解説したいと思います。

その前に1つ解説したいことがあります。それはActionScriptはオブジェクト指向である、
ということです。つまり、自分でクラスファイル(Flashの場合はASファイル)を作ることができるのです。
例)

class Sample {
  private var sampleStr:string = "";

  public function setSampleStr(string str) {
    this.sampleStr = str;
  }

  public function getSampleStr() {
    return this.sampleStr;
  }
}

これを「Sample.as」という名前で保存します。このクラスを他のクラスで使うにはimport文を使います。
このSample.asではsampleStrというフィールドを宣言し、
それに対するアクセサメソッドを用意しています。
(クラス、アクセサメソッドについてはJavaの書籍を読むとよいです。ここではその説明は割愛します。)
と、いう具合にFlashでは自作クラスも利用できるのです。

さて、XMLの取り込みについて考えましょう。
私は取り込んだXMLのルートを別クラスへ保持しておき、
ゲッターメソッド(値を取り出すメソッド)を使って、XMLの値を参照するようにしています。
まずはXMLを操作するカスタムクラスを作成します。

class ConfigCtl {
  private var root:XMLNode;

  // Root をセットするメソッド
  public function setRoot( root:XMLNode ) {
    this.root = root;
  }

  // XMLから値を取得する
  public function getValue( itemStr:String ) {
    for ( var ch:XMLNode=this.root.firstChild; ch!=null;ch=ch.nextSibling ) {
      if( ch.nodeName == itemStr ) {
        return ch.firstChild.nodeValue;
      }
    }
  }
}

*.flaファイル(メインのファイル)では次のようにします。

// 読み込んだXMLのルートをセットするためのインスタンスを用意
// ConfigCtlはカスタムクラス
var conf:ConfigCtl = new ConfigCtl();

// XMLを読み込むためのインスタンスを用意
var myXML = new XML();

// XMLの空白を無視する
myXML.ignoreWhite = true;

// 「config.xml」を読み込む
myXML.load( "config.xml" );

myXML.onLoad = function( loaded ) {
  if ( loaded ) {
    // XMLが読み込まれたならば
    // ROOTをconf変数のフィールドであるrootにセットする
    conf.setRoot( myXML.firstChild );

    // 「XMLが読み込まれたフラグ」を立てる
    isLoad = true;

    // main()メソッドを呼ぶ
    main();
  }
};

これでXMLのルートを取得できます。
XML操作用のカスタムクラス(ConfigCtl.as)をつくり、フィールドにXMLのルートを保持させる
ようにします。ルートにアクセスするメソッドや各タグにアクセスするメソッドを用意します。
そして.flaファイル側では
ConfigCtl conf = new ConfigCtl();
としてそのカスタムクラスをインスタンス化し
conf.setRoot( root );
で読み込んだXMLのルートを保持します。
conf.getSpeed();
conf.getParamValue();
等など都合のよいメソッドを作って、値を好きなときに取得すればよいわけです。
尚、「XMLが読み込まれたフラグ」を立てておくのも重要で、イベントハンドラは
「XML読み込まれたフラグ」がたっているときのみ処理を行うようにしましょう。
XMLは読み込まれていない瞬間もあるのです。その瞬間にイベントハンドラが発生すると
XMLからの値がないのに、処理が走るという不自然な状態になってしまいます。

また、最初の処理はmain()メソッドを作って託しておきます。
このmain()メソッドは当然XMLの読み込みが成功したときのみ呼ばれるようにします。
XMLが読み込まれていない場合は処理をしないことが重要なのです。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
admin