xml からシーンとボタンを作る
「Is It So Easy」の northprint さんのこのエントリーを参考に作ってみます。
各ボタンは、xml を読み込んだ時にシーンと一緒に作成。
そして、その各ボタンは navi と言う名前の CastSprite に addChild します。
っで、navi を Event.RESIZE のイベントハンドラーで位置を操作する感じ。
private function setSiteNavigation():void {
navi = new SiteNavigation(); // これは事前に public var などで定義しておく
navi.id = "navi";
var slist:SerialList = new SerialList();
slist.addCommand(
new AddChild( progression.container, navi ),
function():void { setSiteMenu() }
);
slist.execute();
}
public function setSiteMenu():void {
var slist:SerialList = new SerialList();
slist.addCommand(
new LoadURL( new URLRequest( "contents/xml/data.xml" ) ),
function():void {
addSceneFromXML( new XML( this.latestData ) );
// xml から取得して生成されたシーンの内容を確認
trace( toXMLString() );
var plist:ParallelList = new ParallelList();
for(var i:int=0; i<numScenes; i++) {
var xlist:XMLList = new XMLList( scenes[i].sceneInfo.data );
var obj:Object = XMLUtil.xmlToObject( xlist );
var btn:MenuButton = new MenuButton();
btn.setMenuName = obj.caption;
btn.setSceneId = scenes[i].sceneId;
btn.displayMenu();
btn.x = (i + 1) * 50;
btn.y = 10;
// navi の中に addChild する
plist.addCommand(
new AddChild( navi, btn )
)
}
// ParallelList を実行する
this.parent.insertCommand(
plist
)
}
)
slist.execute();
};
addSceneFromXML( new XML( this.latestData ) ); ってので、 this.latestData って書くと、
直前のデータを勝手に読み込んでくれるみたいです。
ステキ過ぎます、天才です。
numScenes も xml からシーンを読み込んだ段階で、生成されてるみたい。
addSceneFromXML() の直後に trace() とかで確認すると、xml で記述されてる
ちなみに、読み込んでいる data.xml の中身はこんな感じ
<?xml version="1.0" encoding="UTF-8" ?> <prml version="2.0.0" type="text/prml"> <scene name="about"> <caption>about</caption> </scene> <scene name="contact"> <caption>contact</caption> </scene> </prml>
そして、各ボタンのクラスが ↓
public class MenuButton extends CastSprite {
//public var _id:SceneId;
public var _name:String;
public var txt:TextField;
/*======================================================================*//**
* コンストラクタ
*/
public function MenuButton( initObject:Object = null ) {
super( initObject );
txt = new TextField();
}
public function set setSceneId(id:SceneId):void { sceneId = id; }
public function set setMenuName(name:String):void { _name = name; };
public function displayMenu():void {
txt.mouseEnabled = false;
txt.text = _name;
txt.setTextFormat( new TextFormat( null, 10 ) );
addChild( txt );
};
};
各メニュー用のボタンにアクションを追加するときは ↑ の
_onCastAdded() 内に記述するわけですね。
—
追記 : 08.11.07 – 20:21 pm
アホな事してた。
MenuButton.as の public var _id:SceneId; は全然要らない。。。。
ちゃんとボタンのシーンに登録するには、 sceneId に登録しなくちゃ意味無しなので、
public function set setSceneId(id:SceneId):void { _id = id; }; を
public function set setSceneId(id:SceneId):void { sceneId = id; }; に変更
アフォー過ぎて、鼻血でるかと思った。
—
追記 : 08.11.07 – 20:26 pm
あれ、何で MenuButton.as の元が CastSprite なんでしょー??
これって、もしかして CastButton なんじゃないのかな〜〜〜〜〜〜〜。
ちょっと書き換えたほうが良さげ。
CATEGORY
POSTED
jam


COMMENT
0 Comment