forked from: あなたのイベントハンドラを教えて! keno流

by keno42 forked from あなたのイベントハンドラを教えて! (diff: 122)
あなたのイベントハンドラを教えて!
*
* 複数のイベント&複数のインスタンスに
* イベントハンドラを設定するときに
* みなさんの記述方法の違いを知りたい。
*
* [ルール]
* 画面上に3つのボタンが用意されており、
* クリックとロールオーバーの
* イベントハンドラを記述してください。
♥0 | Line 70 | Modified 2010-06-01 15:07:21 | MIT License
play

ActionScript3 source code

/**
 * Copyright keno42 ( http://wonderfl.net/user/keno42 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/yjHN
 */

// forked from clockmaker's あなたのイベントハンドラを教えて!
/**
 * あなたのイベントハンドラを教えて!
 *
 * 複数のイベント&複数のインスタンスに
 * イベントハンドラを設定するときに
 * みなさんの記述方法の違いを知りたい。
 *
 * [ルール]
 * 画面上に3つのボタンが用意されており、
 * クリックとロールオーバーの
 * イベントハンドラを記述してください。
 */
package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	public class FlashTest extends Sprite {
		
		private var _btnA:MyButton;
		private var _btnB:MyButton;
		private var _btnC:MyButton;
		private var _label:MyTextField;
		private const BTN_NAMES:Array = ["A", "B", "C"]; // 名前用の配列
		
		public function FlashTest() {
			// ボタンを作成
			_build();
			
			// 自分流のイベントハンドラを記述ください
			
			// keno 流 -メソッドは分けたい
			// クリック
			_btnA.addEventListener(MouseEvent.CLICK, onClick);
			_btnB.addEventListener(MouseEvent.CLICK, onClick);
			_btnC.addEventListener(MouseEvent.CLICK, onClick);
			// ロールオーバー
			_btnA.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			_btnB.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			_btnC.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
		}
		
		// keno 流
		private function onClick(e:MouseEvent):void {
			_label.text = BTN_NAMES[MyButton(e.target).index] + " がクリックされました";
		}
		private function onRollOver(e:MouseEvent):void {
			_label.text = BTN_NAMES[MyButton(e.target).index] + " がロールオーバーされました";
		}
		
		/**
		 * インターフェースを作る
		 */
		private function _build():void {
			_label = new MyTextField();
			_label.x = 150; _label.y = 280;
			addChild(_label);
			
			_btnA = new MyButton(0);
			_btnA.text = "Button A"; 
			_btnA.x = 70; _btnA.y = 230;
			addChild(_btnA);
			
			_btnB = new MyButton(1);
			_btnB.text = "Button B";
			_btnB.x = 190; _btnB.y = 230;
			addChild(_btnB);
			
			_btnC = new MyButton(2);            
			_btnC.text = "Button C";
			_btnC.x = 310; _btnC.y = 230;
			addChild(_btnC);
		}
	}
}

import flash.display.*;
import flash.text.*;

/**
 * MyButton クラスはボタン的な挙動をするようにしたSpriteです。
 */
class MyButton extends Sprite {
	private var _text:MyTextField;
	private var _index:int; // 各自でindexを持っててもらう
	/**
	 * 新しい MyButton インスタンスを作成します。
	 */
	public function MyButton(index:int = -1){
		_index = index;
		graphics.beginFill(0x000000);
		graphics.drawRoundRect(0, 0, 100, 30, 5, 5);
		addChild(_text = new MyTextField);
		buttonMode = true;
	}
	/**
	 * ボタンの文言を設定します。
	 */
	public function set text(value:String):void {
		_text.text = value;
		_text.x = (100 - _text.textWidth) / 2;
		_text.y = (30 - _text.textHeight) / 2;
	}
	
	// getter
	public function get index():int { return _index; }
}

/**
 * MyTextField クラスは適当な初期設定をしただけのテキストフィールドです。
 */
class MyTextField extends TextField {
	/**
	 * 新しい MyTextField インスタンスを作成します。
	 */
	public function MyTextField() {
		defaultTextFormat = new TextFormat("_sans", 12, 0xFF0000);
		autoSize = "left";
		selectable = false;
		mouseEnabled = false;
	}
}