仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 628|回复: 8
打印 上一主题 下一主题

[学习教程] 来讲讲:Flash AS3教程:Direction类和Dot类-Flash actionscript

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 22:49:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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,层的位置关系其显示问题。
简单生活 该用户已被删除
沙发
发表于 2015-1-17 18:56:59 | 只看该作者
不能设置“alt”属性,失去了一次被搜说引擎检索到的机会。
板凳
发表于 2015-1-24 09:47:41 | 只看该作者
向量图有一个特点,就是放大后的图像是不会改变的. 点阵图 向量图Flash的应用,还有再不断在完善的Action Script脚本语言。
分手快乐 该用户已被删除
地板
发表于 2015-2-1 08:40:17 | 只看该作者
所以不要使用不必要的高祯率 - 否则老的、慢的计算机在显示动画时会阻塞。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-7 03:30:44 | 只看该作者
Rich Media并不是一种具体的互联网媒体形式,而是指具有动画、声音、视频和/或交互性的信息传播方法。 
因胸联盟 该用户已被删除
6#
发表于 2015-2-20 14:06:09 | 只看该作者
在Web上只好把动画做得很小。即使最简单的动画也需要较长的下载时间。Flash的流技术和矢量图形对这种情况做了改变。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-6 18:25:09 | 只看该作者
广告本身无法看到网址链接,不利于网站本身的搜索引擎优化,对增加网站排行的权重没有意义。
透明 该用户已被删除
8#
发表于 2015-3-13 07:07:23 | 只看该作者
考虑到实际的效果,这些专业的网站并不会去单纯追求技术本身,广告设计是否FLASH不是目的,关键是获得最好的宣传效果。
飘灵儿 该用户已被删除
9#
发表于 2015-3-20 16:13:41 | 只看该作者
现在FLASH不是也可以调用后台数据库了么~在过几年没准可以通过FLASH来实现远程控制呢~(有点假了~呵呵)我了解的FLASH优点应该就是第一段那些了~缺点暂时想不出太多了~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 03:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表