トップページ > Flash入門 > マウス・キーボード関係(2)
次のFlashでは,クリックされた回数をカウントしています。
マウスの入力を受け付けたいパーツに,addEventListener()関数を使ってマウスの動きを拾うように設定します。 今回は画面全体,拾うイベントはクリック:“MouseEvent.CLICK”なので, this.stage.addEventListener(MouseEvent.CLICK, onMouseClick) のように記述します。例のごとく,“onMouseClick()”はマウスがクリックされた時に呼ばれる関数として 自分で定義しておきます。 以下,全ソースです。
package { import flash.display.Sprite; import flash.events.Event; import flash.events.TextEvent; import flash.text.*; //Mouse関係のイベントクラスを読み込んでおく import flash.events.MouseEvent; //画面サイズと背景色,フレームレートを設定 [SWF(width="300", height="300", frameRate = "60", backgroundColor="0xffffcc")] public class Main extends Sprite { //================================================================ //MOUSE_CLICK表示用TextField private var tf:TextField = new TextField(); //クリックの回数をカウントする変数 private var cnt:int = 0; //================================================================ //main関数 public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } //コンストラクタ private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point //TextFieldの位置を調節 tf.x = 120; tf.y = 120; //TextFieldの寸法は自動調整 tf.autoSize = TextFieldAutoSize.LEFT; //初期Text内容を表示する(cntをtoString()関数で文字列に直す必要あり) tf.text = cnt.toString(); //フォント設定のためにTextFormatを用意 var format:TextFormat = new TextFormat(); format.size = 48 //TextFieldにformatを登録 tf.setTextFormat(format); //途中でテキストを変更するので,DefauldTextFormatに登録する必要がある tf.defaultTextFormat = format; //TextFieldを表示 addChild(tf); //============================================================ //stageにCLICKイベントを登録 this.stage.addEventListener(MouseEvent.CLICK, onMouseClick); //============================================================ } //================================================================ //クリックされた時に呼ばれる関数 private function onMouseClick(e:MouseEvent):void { //変数cntを加算 cnt++; //TextFieldに文字を表示 tf.text = cnt.toString(); } //================================================================ } }
マウスのボタンを操作した時に発生するイベントを色々使ってみます。 次のFlashは,左ボタンを押した時・離した時,クリック,ダブルクリックを受け付けるようになっています。 ゆっくりクリック操作をして,どのようなタイミングでイベントが発生するのかを確認することができます。 マウスを動かすと,表示がクリアされます。
以下,上のFlashの全ソースコードです。
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.*; //画面サイズと背景色,フレームレートを設定 [SWF(width="300", height="300", frameRate = "60", backgroundColor="0xffffcc")] public class Main extends Sprite { //================================================================ //MOUSE_DOWN表示用TextField private var tf1:TextField = new TextField(); //MOUSE_UP表示用TextField private var tf2:TextField = new TextField(); //CLICK表示用TextField private var tf3:TextField = new TextField(); //DOUBLE_CLICK表示用TextField private var tf4:TextField = new TextField(); //main関数 public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } //コンストラクタ private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point //フォント設定(サイズだけ) var format:TextFormat = new TextFormat(); format.size = 20; format.font = "Arial"; //tf1~tf4の設定をfor文で回して一括設定 for (var i:int = 1; i < 5; i++) { //TextFieldの位置を決める this["tf" + i].y = 25 * (i - 1); //TextFieldの寸法は自動調整 this["tf"+i].autoSize = TextFieldAutoSize.LEFT; //TextFieldを表示 addChild(this["tf" + i]); //TextFieldにフォントを設定する //文字列をクリアすることがある場合は,setTextFormat()関数を使わずに, //defaultTextFormatパラメータを直接設定する。 this["tf" + i].defaultTextFormat = format; } //stageにMOUSE_DOWNイベントを登録 this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); //stageにMOUSE_UPイベントを登録 this.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); //stageにCLICKイベントを登録 this.stage.addEventListener(MouseEvent.CLICK, onMouseClick); //stageにDOUBLE_CLICKを登録(doubleClickEnabledをtrueにする必要あり) this.stage.doubleClickEnabled = true; this.stage.addEventListener(MouseEvent.DOUBLE_CLICK, onDoubleClick); //stageにMOUSE_MOVEイベントを登録 this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); } //左ボタンが押された時に呼ばれる関数 private function onMouseDown(e:MouseEvent ):void { //1番目のTextFieldに文字を表示 tf1.text = "左ボタンが押されました"; } //左ボタンが離された時に呼ばれる関数 private function onMouseUp(e:MouseEvent):void { //2番目のTextFieldに文字を表示 tf2.text = "左ボタンが離されました"; } //クリックされた時に呼ばれる関数 private function onMouseClick(e:MouseEvent):void { //3番目のTextFieldに文字を表示 tf3.text = "クリックされました" } //ダブルクリックされた時に呼ばれる関数 private function onDoubleClick(e:MouseEvent):void { //4番目のTextFieldに文字を表示 tf4.text = "ダブルクリックされました" } //マウスが動かされたときに呼ばれる関数 private function onMouseMove(e:MouseEvent):void { //すべてのテキストフィールドをクリアする for (var i:int = 1; i < 5; i++) { this["tf"+i].text = "" } } } }