<a href="http://webabcd.blog.51cto.com/1787395/342175" target="_blank">[索引頁]</a>
<a href="http://down.51cto.com/data/100162" target="_blank">[源碼下載下傳]</a>
積少成多Flash(7) - ActionScript 3.0 互動之滑鼠事件和鍵盤事件
介紹
示範使用 Flash ActionScript 3.0 來監聽使用者的鍵盤事件和滑鼠事件,并對其作相應的處理
鍵盤事件 - 在 flash.events.KeyboardEvent 類下。隻有兩個事件類型 KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP 。
滑鼠事件 - 在 flash.events.MouseEvent 類下。常用的事件類型有 MouseEvent.MOUSE_DOWN, MouseEvent.DOUBLE_CLICK, MouseEvent.MOUSE_UP, MouseEvent.MOUSE_OVER, MouseEvent.MOUSE_MOVE 和 MouseEvent.MOUSE_OUT 等。
1、處理鍵盤事件
做 4 個隻有兩幀的 MovieClip 并放到 UI 上,分别用于提示上/下/左/右鍵的按鍵情況,預設情況下顯示第一幀,當使用者按下了對應的鍵時則顯示第二幀。這 4 個 MovieClip 的名稱分别為 btnUp, btnDown, btnLeft, btnRight
再在 UI 上畫一個物體,由于顯示使用者的鍵盤事件(上/下/左/右)所産生的結果
Main.as
package
{
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.MovieClip;
import flash.ui.Keyboard;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
// 儲存使用者是否按下了上/下/左/右鍵
public var isUp:Boolean = false;
public var isDown:Boolean = false;
public var isLeft:Boolean = false;
public var isRight:Boolean = false;
// 每次 ENTER_FRAME 物體所需移動的距離
public var step:Number = 5;
public function Main()
{
// 設定四個用于顯示方向的 MovieClip 的初始狀态為停在第一幀
btnUp.stop();
btnDown.stop();
btnLeft.stop();
btnRight.stop();
// 處理按鍵的按下、放開事件(在舞台上偵測該事件)
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleaseHandler);
// 用于響應按鍵事件的 ENTER_FRAME
this.addEventListener(Event.ENTER_FRAME, enterFrameHandlerForKeyboard);
}
protected function keyPressHandler(event:KeyboardEvent):void
// 檢測使用者按下的鍵
switch (event.keyCode)
{
case Keyboard.UP:
isUp = true;
btnUp.gotoAndStop(2);
block.rotation = 0;
break;
case Keyboard.DOWN: // 按的是“下”鍵
isDown = true; // 儲存使用者的按鍵資訊。即使用者正在按“下”鍵
btnDown.gotoAndStop(2); // 用于顯示方向“下”的 MovieClip 停到第二幀
block.rotation = 180; // 物體旋轉 180 度
case Keyboard.LEFT:
isLeft = true;
btnLeft.gotoAndStop(2);
block.rotation = 270;
case Keyboard.RIGHT:
isRight = true;
btnRight.gotoAndStop(2);
block.rotation = 90;
}
protected function keyReleaseHandler(event:KeyboardEvent):void
// 檢測使用者放開的鍵
switch( event.keyCode )
case Keyboard.UP: // 按的是“上”鍵
isUp = false; // 儲存使用者的按鍵資訊。即使用者已經不再按“上”鍵了
btnUp.gotoAndStop(1); // 用于顯示方向“上”的 MovieClip 停到第一幀
case Keyboard.DOWN:
isDown = false;
btnDown.gotoAndStop(1);
isLeft = false;
btnLeft.gotoAndStop(1);
isRight = false;
btnRight.gotoAndStop(1);
protected function enterFrameHandlerForKeyboard(event:Event):void
// 根據使用者的按鍵情況。将物體向上/下/左/右移動指定的距離
if (isLeft)
block.x -= step;
if (isRight)
block.x += step;
if (isUp)
block.y -= step;
if (isDown)
block.y += step;
}
}
2、處理滑鼠事件
在 UI 上畫一個物體,由于顯示使用者的滑鼠事件所産生的結果,即該物體會向使用者在舞台上所單擊的位置移動
// 滑鼠單擊位置的坐标
public var targetX:Number = 0;
public var targetY:Number = 0;
// 物體是否再向滑鼠單擊的位置移動
public var moving:Boolean = false;
// 處理滑鼠的按下事件(在舞台上偵測該事件)
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
// 用于響應滑鼠按下事件的 ENTER_FRAME
this.addEventListener(Event.ENTER_FRAME, enterFrameHandlerForMouse);
protected function mouseDownHandler(event:MouseEvent):void
// 當使用者在舞台上按下滑鼠後,擷取滑鼠的坐标
targetX = event.stageX;
targetY = event.stageY;
// 物體正在向滑鼠單擊的位置移動
moving = true;
}
protected function enterFrameHandlerForMouse(event:Event):void
if (moving)
// 計算物體在 X 方向和 Y 方向上分别需要移動的距離
var offsetX:Number = block.x - targetX;
var offsetY:Number = block.y - targetY;
// 計算物體需要旋轉的角度
var targetRotation:Number = -Math.atan2(offsetX, offsetY) / (Math.PI / 180);
block.rotation = targetRotation;
if( Math.sqrt((offsetX*offsetX) + (offsetY*offsetY)) > step )
{
// 如果還沒有移動到目标位,則繼續移動指定的距離
block.y -= step * Math.cos(targetRotation * (Math.PI/180));
block.x += step * Math.sin(targetRotation * (Math.PI/180));
}
else
// 物體已經移動到滑鼠所單擊的位置
moving = false;
OK
本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/342199,如需轉載請自行聯系原作者