複数ボタンの処理など
複数のテキストボタンを作成して、押したら"Clicked!"に変更。
"All Clear"を押すと全てのボタンを消去する。
→ http://good-morning-world.com/swf/txtbutton/
テキストボタンを作るにはマウスイベント用にSpriteと組み合わせて作る。
複数作る効率を考えて配列を使用。ボタン毎にaddEventListenerも効率悪い感じなのでforループで記述してみた。
また、addEventListenerに引数を指定できたら良いなと思ってたんだけど、
btn.addEventListener(MouseEvent.Click, onMouseClick(引数)); function onMouseClick(引数):Function { return function(event:MouseEvent):void { // 処理 } }
な書き方でいけるらしい。
txtbutton.as
package { import flash.display.*; import flash.events.*; import flash.text.*; [SWF(width = 400, height = 300)] public class txtbutton extends Sprite { private var tfld:Array = new Array(5); public function txtbutton() { var txt:Array = new Array("Button1", "Button2", "Button3", "Button4", "All Clear"); var btn:Array = new Array(5); var bx:int = 10; var by:int = 10; for (var i:int = 0; i < 5; i++) { btn[i] = new Sprite(); btn[i].buttonMode = true; // ボタンとして動作させる btn[i].x = bx; btn[i].y = by; tfld[i] = new TextField(); tfld[i].text = txt[i]; tfld[i].autoSize = TextFieldAutoSize.LEFT; tfld[i].mouseEnabled = false; // マウスイベントを受け取らない addChild(btn[i]); btn[i].addChild(tfld[i]); btn[i].addEventListener(MouseEvent.Click, onMouseClick(i)); by += 20; } } private function onMouseClick(i:int):Function { return function(event:MouseEvent):void { if (i == 4) { while (numChildren > 0) { removeChildAt(0); } } else { tfld[i].text = "Clicked!"; } } } } }
参考:
テキストフィールドをボタン処理させる時に気をつける「mouseEnabled」 - 1ka2ka.com
http://1ka2ka.com/archives/200807/23_215215.html
addEventListenerで一緒に引数を渡したい | BONKURA BLOG
http://blog2.bonkura.jp/?p=13
flamemo: MC以下のすべての Child を removeChild() したい
http://flamemo.blogspot.com/2009/04/mc-child-removechild.html