forked from: forked from: あなたのイベントハンドラを教えて!coppiee流
あなたのイベントハンドラを教えて!
*
* 複数のイベント&複数のインスタンスに
* イベントハンドラを設定するときに
* みなさんの記述方法の違いを知りたい。
*
* [ルール]
* 画面上に3つのボタンが用意されており、
* クリックとロールオーバーの
* イベントハンドラを記述してください。
/**
* Copyright 9re ( http://wonderfl.net/user/9re )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/AndF
*/
// forked from 9re's forked from: forked from: あなたのイベントハンドラを教えて!coppiee流
// forked from coppieee's forked from: あなたのイベントハンドラを教えて!coppiee流
// forked from clockmaker's あなたのイベントハンドラを教えて!
/**
* あなたのイベントハンドラを教えて!
*
* 複数のイベント&複数のインスタンスに
* イベントハンドラを設定するときに
* みなさんの記述方法の違いを知りたい。
*
* [ルール]
* 画面上に3つのボタンが用意されており、
* クリックとロールオーバーの
* イベントハンドラを記述してください。
*/
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class FlashTest extends Sprite {
private var _label:MyTextField;
public function FlashTest() {
// ボタンを作成
_label = new MyTextField();
_label.x = 150; _label.y = 280;
// 自分流のイベントハンドラを記述ください
// coppieee 流をみて
// ひどいコードを書いてみたくなりました。
forEach(
["A", "B", "C"],
function ($index:int, どのボタン:String):void {
var btn:MyButton = new MyButton;
btn.text ='Button ' + どのボタン;
btn.y = 230;
btn.x = 70 + $index * 120;
addChild(btn);
keys(翻訳).map(bind(
function (何を:String):Array {
return [btn.addEventListener, 翻訳[何を], function ():void {
_label.text = どのボタン + "が" + 何を + "されました。";
}];
}
)).forEach(bind(apply));
}
);
addChild(_label);
}
}
}
const 翻訳:Object = {
"ロール・オーバー" : "rollOver",
"クリック" : "click"
};
function apply(arr:Array):* {
return arr.shift().apply(null, arr);
}
function bind(f:Function):Function {
return function (...args):* {
return f.apply(null, args.slice(0, 1));
}
}
function keys(o:Object):Array {
var _keys:Array = [];
for (var key:String in o) _keys.push(key);
return _keys;
}
function forEach(o:Object, f:Function):void {
for (var k:String in o) f.call(null, k, o[k]);
}
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;
}
}