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

by narutohyper forked from あなたのイベントハンドラを教えて! (diff: 54)
Copyright clockmaker ( http://wonderfl.net/user/clockmaker )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/43Ln

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

ActionScript3 source code

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

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

/**
* あなたのイベントハンドラを教えて!
*
* 複数のイベント&複数のインスタンスに
* イベントハンドラを設定するときに
* みなさんの記述方法の違いを知りたい。
*
* [ルール]
* 画面上に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;

        public function FlashTest() {
           	// ボタンを作成
           	_build();
            
           	// 自分流のイベントハンドラを記述ください
           	// Narutohyper流 
			// クリック
			//私の場合IDとして処理する場合が多いので・・・
			//実際は、MyButtonClassに「ID」プロパティを作成しますがw
			 _btnA.name = "1";
			 _btnB.name = "2";
			 _btnC.name = "3";
					 
			// Click
   			addEventListener(MouseEvent.CLICK, _onEventHandler);
      		// ロールオーバー
      		addEventListener(MouseEvent.MOUSE_OVER, _onEventHandler);
        }
        // Narutohyper流 
        private function _onEventHandler(e:MouseEvent):void {
			if (e.target.name) {
				if (e.type==MouseEvent.CLICK) {
					clickText(e.target.name)
				} else if (e.type==MouseEvent.MOUSE_OVER) {
					overText(e.target.name)
				}
			}
		}
        
		private function clickText(_id:String):void {
			var id:uint = uint(_id);
			_label.text = id + "がClickされたよ";							
		}
		
		private function overText(_id:String):void {
			var id:uint = uint(_id);
			_label.text = id + "がオーバーされたよ";							
		}
				
				
				
				
        /**
        * インターフェースを作る
        */
        private function _build():void {
            _label = new MyTextField();
            _label.x = 150; _label.y = 280;
            addChild(_label);

            _btnA = new MyButton();
            _btnA.text = "Button A"; 
            _btnA.x = 70; _btnA.y = 230;
            addChild(_btnA);
            
            _btnB = new MyButton();
            _btnB.text = "Button B";
            _btnB.x = 190; _btnB.y = 230;
            addChild(_btnB);
   
            _btnC = new MyButton();            
            _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;
    /**
    * 新しい MyButton インスタンスを作成します。
    */
    public function MyButton(){
        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;
    }
}

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