액 션 스 크 립 트 3.0 마우스 이벤트

Actionscript 3.0 의 이벤트 체제 에 대해 나중에 모듈 별로 하나씩 소개 하고 마지막 으로 완전한 문 서 를 만 듭 니 다.제1장 을 보고 마우스 사건 에 대해 이야기 하 는 김 에 내 가 만난 문제 하 나 를 말 해 보 자.Actionscript 3.0 마우스 이 벤트 는 클릭,DoubleClick 등 마우스 이 벤트 를 감청 하고 캡 처 하 는 것 일 뿐 입 니 다.AS3 에서 마우스 이벤트 패 키 지 는 flash.events.Mouse Event 에 있 습 니 다.여기에 간단 한 ActionScript 3.0 을 붙 여 보드 프로그램 코드 를 실현 하고 코드 를 결합 하여 마우스 의 감청,캡 처 처리 과정 을 이해 합 니 다

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent; //import MouseEvent
/**
* @Written by Leezhm, 6th Jun, 2009
* @Contact : [email protected]
* @author : Leezhm
*
**Last Modified by Leezhm on 6th Jun, 2009
*
*/
[SWF(height = "450", width = "600", backgroundColor = "0xFFFFFF", frameRate = "31")] //
public class Main extends Sprite
{
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
addEventListener(Event.ENTER_FRAME, OnEnterFrameHandler); // ENTER_FRAME ,
}
private function OnEnterFrameHandler(e:Event):void //ENTER_FRAME
{
this.DrawGraphic();
}
private function DrawGraphic():void
{
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, OnMouseDownHandler); // Down
}
private function OnMouseDownHandler(e:MouseEvent):void // Down
{
this.graphics.lineStyle(2, 0, 1);
this.graphics.moveTo(this.mouseX, this.mouseY);
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, OnMouseMoveHandler); // MOVE
}
private function OnMouseMoveHandler(e:MouseEvent):void // MOVE
{
this.graphics.lineTo(this.mouseX, this.mouseY);
this.stage.addEventListener(MouseEvent.MOUSE_UP, OnMouseUpHandler); // UP
}
private function OnMouseUpHandler(e:MouseEvent):void // UP
{ // DOWN、MOVE UP
this.stage.removeEventListener(MouseEvent.MOUSE_DOWN, OnMouseDownHandler);
this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, OnMouseMoveHandler);
this.stage.removeEventListener(MouseEvent.MOUSE_UP, OnMouseUpHandler);
}
}
}
사실 위의 코드 를 보면 Actionscript 3.0 에서 마우스 사건 의 처리 과정 을 간단하게 이해 하고 효과 사진 도 한 장 전달 합 니 다       자,제 가 저 지 른 실 수 를 말씀 드 리 겠 습 니 다.코드 는 다음 과 같 습 니 다

package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class A extends Sprite
{
public function A()
{
graphics.beginFill(0xFF0000);
graphics.drawCircle(100,100,40);
graphics.endFill();
addEventListener(MouseEvent.CLICK, testclick);
}
private function testclick(event:MouseEvent):void {
trace("Hello World!!!");
}
}
}
실제로 위의 이 코드 는 마우스 의 CLICK 사건 에 응답 하지 않 았 습 니 다.왜 저 는 처음에 많은 시간 을 들 여 원인 을 찾 았 습 니 다.사실 이것 은 Actionscript 3.0 의 이벤트 실현 체제 와 관련 되 어 있 습 니 다.여기 서 간단하게 설명 하 겠 습 니 다.이 유 는 간단 합 니 다.위 에 있 는 문서 류 가 비어 있 고 표시 대상 이 전혀 없 기 때문에 마우스 이벤트 에 응답 하지 않 습 니 다.(그 Draw Circle 은 표시 대상 이 라 고 할 수 없습니다.배경 일 뿐 Actionscript 의 디 스 플레이 목록 에 있 지 않 습 니 다.그래서 Actionscript 이벤트 메커니즘 에서 이벤트 메 시 지 를 보 낼 수 없습니다.아래 는 상기 코드 를 수정 하면 됩 니 다

package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class A extends Sprite {
public function A() {
var _sp:Sprite=new Sprite()
_sp.graphics.beginFill(0xFF0000);
_sp.graphics.drawCircle(100,100,40);
_sp.graphics.endFill();
addChild(sp)
_sp.addEventListener(MouseEvent.CLICK, testclick);
}
private function testclick(event:MouseEvent):void {
trace("Hello World!!!");
}
}
}
두 코드 를 비교 해 보면 뒤에 표시 대상 을 추가 하고 표시 대상 에서 마우스 사건 을 감청 하 는 것 을 발견 할 수 있다.물론 첫 번 째 코드 에서 그렇게 Stage 에서 감청 할 수도 있 습 니 다.this.addEventListener 가 직접 이렇게 감청 하 는 것 은 root 입 니 다.Stage 와 같은 DisplayObject 대상 이 아니 라 마찬가지 로 안 됩 니 다.

좋은 웹페이지 즐겨찾기