AS3でYAMLを扱うテスト

3ヶ月ぶりくらいにAS3を触る。3Dモデルの作成は時間がかかるので休日に回すとして、昼休みでやれそうな「AS3でYAMLを扱うテスト」をやってみることにした。


Google Code Archive - Long-term storage for Google Code Project Hosting.の「Featured Downloads」の中身を「flex_sdk_2\frameworks\libs」に入れれば大丈夫だろう、と思ったら「エラー:SWC AS3YAML_04.swcをロードできません:不明なエレメントscriptがcatalog.xmlのkeep-as3-metadataセクションで見つかりました」という意味がわからないエラーが。
で、このエラーメッセージでググったところ、SDKを最新版にすれば良いらしい。


ということで、SDKを2から3に変更。他のライブラリの移行はとりあえず後回し。まずはYAMLのサンプルを作成する。



で、パスの設定の問題やLoadVarsがAS3では使えないことなどで時間がかかりつつも、なんとかサンプルの作成が完了。


このページがサンプルのページで、最初は「DUMMY」が表示されて、YAMLのロードが完了したら「NAME = Enemy」と表示される。


as3yamlを使ってYAMLをObject(マップ)としてロードし、キー(Name)からバリュー(Enemy)を得て表示に使っている。


サンプルの方では「テキストファイルからのロードがローカルではできない」という問題があるものの、「オワタ×エディタ」への組み込みには問題ない(ファイルではなくテキストデータでやりとりする)のでこれで一旦終了。来週の昼休みあたりで、エディタへのYAML対応を組み込んでみたい。


以下、コード。
ちなみに、Googleサイトの自分のところに、コードとswfが上がっている。

//Test_YAML.as
//author Show=O=Healer

package {
    import flash.display.*;
    import flash.text.*;
    import flash.events.*;
	import flash.net.*;

	import org.as3yaml.*;

    [SWF(width=240, height=240, backgroundColor=0xFFFFFF)]

	public class Test_YAML extends Sprite {
    	//コンストラクタ
        public function Test_YAML() {
        	//表示するテキストの初期化
            var textField:TextField;
        	{
	            textField = new TextField();
	        	addChild(textField);
        		textField.text = "DUMMY";
        	}

        	//YAMLを読み込んだときの挙動の決定
			var onYamlLoad:Function;
			{
				onYamlLoad = function(event:Event):void{
        			var yamlStr:String = event.target.data;//ファイルの中身
        			var yamlMap:Object = YAML.decode(yamlStr);//YAMLをマップとしてロード

					//テキストを変更
        			textField.text =
        				"NAME = " + yamlMap.Name
        			;
				};
			}

        	//実際にファイルを読み込む
			{
				var loader:URLLoader = new URLLoader();

				loader.addEventListener(Event.COMPLETE, onYamlLoad);

				loader.load(new URLRequest("Test.yaml"));
    		}
        }
    }
}

Test.yamlも一応。

Name: Enemy
Pos:
 X:10
 Y:20