|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Flash动画制作软件是一款可以帮助设计者制作和设计动画Flash介绍、Flash标识、Flash广告、Flash弹出菜单以及任何其它Flash动画的Flash文本效果工具。
后面报告了Flashas3教程:OutDisplay类,本篇对Direction类的办法属性和Dot的更新部分解说。
关于该例子的教程请存眷第九篇条记!
行将出Direction类与Dot类的实战利用教程,本篇只对Direction类的办法属性和Dot的更新部分解说
起首是
index.base.game.Direction类
感化:把持飞机游戏,坦克游戏,大概一些和偏向有关的偏向按键操纵
机关函数:
publicfunctionDirection(_area:InteractiveObject,isSole:Boolean=false,_up:uint=38,_down:uint=40,_left:uint=37,_right:uint=39)
参数一:偏向键的感化地区,假如_area以后不是核心,那末是侦听不到键盘事务的,一样平常这儿都是利用Stage做为感化地区
参数二:是不是为单向事务触发,假如为false,那末按了甚么键就是甚么,能够同时触发上和左等两个大概两个以上的事务,反之以最初按的谁人键为准
参数三,四,五,六:按键的键值,默许为38,40,37,39,分离是偏向键的高低摆布!
start办法:
publicfunctionstart():void
入手下手捕捉事务,当触发机关函数,将主动实行start办法
stop办法:
publicfunctionstop():void
中断捕捉事务
setKey办法:
publicfunctionsetKey(num:uint,vars:uint):void
设置按键键值
参数一:偏向键标识,请参考该类的常量属性
参数二:按键键值
常量属性:
publicstaticconstUP:uint=0;
publicstaticconstDOWN:uint=1;
publicstaticconstLEFT:uint=2;
publicstaticconstRIGHT:uint=3;
分离代表:高低摆布的偏向键标识
clear办法:
publicfunctionclear():void
扫除一切偏向纪录
area属性:
publicvararea:InteractiveObject
前往感化地区
sole属性:
publicvarsole:Boolean
前往是不是单向操纵
DirectionEvent.DO事务:
当无方向键是按下往的时分,则会公布事务,事务中含有up,down,left,right,4个属性,分离暗示哪几个键是按下往的!
==========气逝世你的分割线==========
Dot类在后面的收拾条记中,已经说过,此次是更新类的办法和属性
增添了扭转属性,而且能够盘算以后偏向的某间隔后的点
以下只对更新的办法和属性举行解说:其他的请看老的收拾条记:
go办法:
publicfunctiongo(num:Number,isChange:Boolean=false):Dot
参数一,暗示面向扭转偏向行进几的间隔
参数二,暗示是不是也跟新该点基于num变更以后的点坐标
clear办法:
publicfunctionclear():void
清空绑定工具的援用
r属性:
publicfunctionsetr(num:Number):void
publicfunctiongetr():Number
扭转属性的设置,假如isListener值为真,则改动扭转值会触发R_CHANGE的事务
Direction类源代码:
CODE:
packageindex.base.game{
importflash.events.EventDispatcher;
importflash.events.KeyboardEvent;
importflash.events.Event;
importflash.display.InteractiveObject;
importindex.base.events.DirectionEvent;
publicclassDirectionextendsEventDispatcher{
//偏向暗示
publicstaticconstUP:uint=0;
publicstaticconstDOWN:uint=1;
publicstaticconstLEFT:uint=2;
publicstaticconstRIGHT:uint=3;
//感化地区
publicvararea:InteractiveObject;
//是不是单向
publicvarsole:Boolean;
//高低摆布键值
privateconstdirectionAr:Array=newArray(4);
//是不是高低摆布
privatevar_up:Boolean=false;
privatevar_down:Boolean=false;
privatevar_left:Boolean=false;
privatevar_right:Boolean=false;
publicfunctionDirection(_area:InteractiveObject,isSole:Boolean=false,_up:uint=38,_down:uint=40,_left:uint=37,_right:uint=39){
area=_area;
sole=isSole;
directionAr[UP]=_up;
directionAr[DOWN]=_down;
directionAr[LEFT]=_left;
directionAr[RIGHT]=_right;
start();
}
//入手下手猎取事务
publicfunctionstart():void{
area.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
area.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
area.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
//事务帧频仍触发
privatefunctiononEnterFrame(e:Event):void{
varnum:uint=Number(_up)+Number(_down)+Number(_left)+Number(_right);
if(num==0){
return;
}
vareve:DirectionEvent=newDirectionEvent(DirectionEvent.DO);
eve.up=_up;
eve.down=_down;
eve.left=_left;
eve.right=_right;
dispatchEvent(eve);
}
//中断猎取事务
publicfunctionstop():void{
area.removeEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
area.removeEventListener(KeyboardEvent.KEY_UP,onKeyUp);
area.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
}
//鼠标按下往事务
privatefunctiononKeyDown(e:KeyboardEvent):void{
key(e.keyCode,true)
}
//鼠标弹下去事务
privatefunctiononKeyUp(e:KeyboardEvent):void{
key(e.keyCode,false)
}
//变更形态
privatefunctionkey(num:uint,isDown:Boolean):void{
switch(num){
casedirectionAr[UP]:
if(sole)clear();
_up=isDown;
break;
casedirectionAr[DOWN]:
if(sole)clear();
_down=isDown;
break;
casedirectionAr[LEFT]:
if(sole)clear();
_left=isDown;
break;
casedirectionAr[RIGHT]:
if(sole)clear();
_right=isDown;
break;
}
}
//设置按钮
publicfunctionsetKey(num:uint,vars:uint):void{
directionAr[num]=vars;
}
//清空按键
publicfunctionclear():void{
_up=_down=_left=_right=false;
}
}
}Dot类源代码:
CODE:
packageindex.base.geom{
importflash.events.EventDispatcher;
importflash.display.DisplayObject;
importindex.base.events.DotEvent;
publicclassDotextendsEventDispatcher{
privatevar_x:Number;
privatevar_y:Number;
privatevar_r:Number;
privatevardis:DisplayObject;
publicvarisListen:Boolean;
publicfunctionDot(x_:Number=0,y_:Number=0,r_:Number=0,_isListen:Boolean=false){
_x=x_;
_y=y_;
_r=r_;
isListen=_isListen;
}
//绑定DisplayObject
publicfunctionbind(_dis:DisplayObject,isInTime:Boolean=false):void{
dis=_dis;
updata();
if(isInTime)dis.addEventListener("enterFrame",enterFrameFun);
}
//帧频仍事务
privatefunctionenterFrameFun(e:Object):void{
if(_x!=dis.x)x=dis.x;
if(_y!=dis.y)y=dis.y;
if(_r!=dis.rotation)r=dis.rotation;
}
//更新xy数据
publicfunctionupdata():void{
if(dis!=null){
_x=dis.x;
_y=dis.y;
_r=dis.rotation;
}
}
//盘算该点向R偏向行进某间隔后的点
publicfunctiongo(num:Number,isChange:Boolean=false):Dot{
updata();
varyx:Number=Math.tan(_r*Math.PI/180);
vartmpx:Number=num/Math.sqrt(Math.pow(yx,2)+1);
vartmpy:Number=tmpx*yx;
varn:int=Number(Math.abs(_r)<=90)*2-1;
vardot:Dot=newDot(_x+tmpx*n,_y+tmpy*n,_r);
if(isChange){
x=dot.x;
y=dot.y;
}
returndot;
}
//盘算该点与别的一点的间隔
publicfunctionfrom(_dot:Dot,isQuadrant:Boolean=false):Number{
updata();
varnum:Number=Math.sqrt(Math.pow(_dot.x-_x,2)+Math.pow(_dot.y-_y,2));
if(!isQuadrant)num=Math.abs(num);
returnnum;
}
//盘算该点与别的一点所构成的线段与程度线的夹角,按顺工夫盘算
publicfunctionangle(_dot:Dot,isRadian:Boolean=false):Number{
updata();
varnumx:Number=_dot.x-_x;
varnumy:Number=_dot.y-_y;
varnum:Number=Math.atan(numy/numx);
if(!isRadian)num=num*180/Math.PI;
returnnum;
}
//前往以后点处在别的一点的哪一个象限中或前往别的一点处在以后点的哪一个象限中
publicfunctionquadrant(_dot:Dot,isMaster:Boolean=true):int{
updata();
if(_x==_dot.x||_y==_dot.y){
return0;
}
varnum:int;
varp1:Boolean=(_x-_dot.x)>0;
varp2:Boolean=(_y-_dot.y)>0;
num=isMaster?(p1?(p2?2:3):(p2?1:4)):(p1?(p2?4:1):(p2?3:2));
returnnum;
}
//前往该点距0点的间隔
publicfunctiongetlength():Number{
updata();
varnum:Number=Math.sqrt(Math.pow(_x,2)+Math.pow(_y,2));
returnnum;
}
//扫除显现工具
publicfunctionclear():void{
dis=null;
}
//改动扭转值
publicfunctionsetr(num:Number):void{
_r=num;
if(dis!=null)dis.rotation=num;
if(isListen)dispatchEvent(newDotEvent(DotEvent.R_CHANGE,true));
}
//改动扭转值
publicfunctiongetr():Number{
updata();
return_r;
}
//改动X坐标
publicfunctionsetx(num:Number):void{
_x=num;
if(dis!=null)dis.x=num;
if(isListen)dispatchEvent(newDotEvent(DotEvent.X_CHANGE,true));
}
//设置X坐标
publicfunctiongetx():Number{
updata();
return_x;
}
//改动Y坐标
publicfunctionsety(num:Number):void{
_y=num;
if(dis!=null)dis.y=num;
if(isListen)dispatchEvent(newDotEvent(DotEvent.Y_CHANGE,true));
}
//设置Y坐标
publicfunctiongety():Number{
updata();
return_y;
}
}
}
DirectionEvent类源代码:CODE:
packageindex.base.events{
importflash.events.Event;
publicclassDirectionEventextendsEvent{
publicvarup:Boolean;
publicvardown:Boolean;
publicvarleft:Boolean;
publicvarright:Boolean;
publicstaticconstDO:String="do";
publicfunctionDirectionEvent(type:String){
super(type);
}
}
}DotEvent类源代码:CODE:
packageindex.base.events{
importflash.events.Event;
publicclassDotEventextendsEvent{
publicstaticconstX_CHANGE:String="xChange";
publicstaticconstY_CHANGE:String="yChange";
publicstaticconstR_CHANGE:String="rChange";
publicfunctionDotEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false){
super(type,bubbles,cancelable);
}
}
}
本地或全局转换应用于任何对象。但非真正意义上的3D,层的位置关系其显示问题。 |
|