仓酷云

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

[学习教程] 动画教程之Flash AS3教程:Dot类-Flash actionscript

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 22:49:27 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
Flash也支持高品质的mp3音频流、文字输入字段、交互式接口等等很多工具。这个最新版本可以观看所有的flash格式。
后面先容了FlashAS3教程:类的分包处置,接着先容index.base.geom.Dot类解说。
flash效果:
http://www.webjx.com/files/media/dot.swf
拖拽物体1和物体2,就能够看到效果了

index.base.geom.Dot类解说
基础功效:纪录xy两点

机关函数
publicfunctionDot(x_:Number=0,y_:Number=0,_isListen:Boolean=false)
前两个参数暗示Dot的初始地位,第三个参数暗示是不是是一个功效性强的点
假如为false,当xy产生改动的时分,就不会公布事务,为true则会公布事务

bind绑定显现工具办法
publicfunctionbind(_dis:DisplayObject,isInTime:Boolean=false):void
当Dot绑定到DisplayObject上以后,Dot的xy属性会跟着_dis改动而改动
第一个参数为绑定的工具,第二个参数暗示是不是立即绑定
假如为false,Dot的xy属性不会跟着_dis的改动而立即改动,但在猎取Dot的xy属性,大概挪用Dot的办法时,将会当即改动而且以_dis的xy属性为基准
假如为true,Dot的xy属性会跟着_dis的改动而当即改动,假如isListen为true,还会立即公布xy改动的事务,那末即是能够侦听显现工具的xy属性,而且在改动后做出立即的反响

updata革新办法
publicfunctionupdata():void
更新显现工具与Dot的xy属性

from前往两点之间间隔
publicfunctionfrom(_dot:Dot,isQuadrant:Boolean=false):Number
第一个参数暗示,停止点,第二个参数暗示,是不是为实在间隔
假如为false,前往的两点间隔相对是负数,指的是两点之间的相对间隔
假如为true,则前往绝对坐标,那末是有大概的为负的!

angle前往两点所构成的夹角
publicfunctionangle(_dot:Dot,isRadian:Boolean=false):Number
第一个参数暗示,别的一个点,第二个参数暗示,是不是为弧度值
前往的角度是绝对顺工夫的实在角度值,详细的数值变更能够从下面的例子看出

quadrant前往绝对点地点的象限
publicfunctionquadrant(_dot:Dot,isMaster:Boolean=true):int
第一个参数暗示别的一个点,第二个参数暗示是不是以该点为尺度,详细请看示例
前往0,暗示两点在统一条横着大概竖着的直线上
前往1,暗示在第一象限,前往2暗示第二象限…………最高是第四象限。。
不晓得象限是甚么意义的,请看这点击跳转"象限"的百度百科页面

clear办法
publicfunctionclear():void
清空显现工具

length属性(只读)
publicfunctiongetlength():Number
猎取该点距0,0点的间隔

x属性
publicfunctionsetx(num:Number):void
publicfunctiongetx():Number
设置x属性,假如isListen为true,则会公布x改动的事务

y属性
publicfunctionsety(num:Number):void
publicfunctiongety():Number
设置y属性,假如isListen为true,则会公布y改动的事务

isListener属性
publicvarisListen:Boolean
指定设置isListen的值,是不是为可侦听xy


举例:
下面的flash展现源代码
CODE:
importindex.base.geom.Dot;
importindex.base.events.DotEvent;

varpo1ot=newDot(0,0,true);
varpo2ot=newDot(0,0,true);
po1.bind(p1,true);
po2.bind(p2,true);

po1.addEventListener(DotEvent.DOT_CHANGE,dotChangeFun);
po2.addEventListener(DotEvent.DOT_CHANGE,dotChangeFun);

functiondotChangeFun(eotEvent):void{
te.text="物体1坐标:"+po1.x+","+po1.y;
te.appendText("
物体2坐标:"+po2.x+","+po2.y);
te.appendText("
两点之间间隔:"+po1.from(po2));
te.appendText("
所构成的角度:"+po1.angle(po2));
te.appendText("
物体1地点象限:"+po1.quadrant(newDot,false));
te.appendText("
物体2地点象限:"+po2.quadrant(newDot,false));
te.appendText("
物体1关于物体2在象限:"+po2.quadrant(po1));
}

p1.addEventListener(MouseEvent.MOUSE_DOWN,p1MouseDownFun);
p2.addEventListener(MouseEvent.MOUSE_DOWN,p2MouseDownFun);

functionp1MouseDownFun(e:MouseEvent):void{
p1.startDrag();
stage.addEventListener(MouseEvent.MOUSE_UP,p1MouseUpFun);
}

functionp1MouseUpFun(e:MouseEvent):void{
p1.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP,p1MouseUpFun);
}

functionp2MouseDownFun(e:MouseEvent):void{
p2.startDrag();
stage.addEventListener(MouseEvent.MOUSE_UP,p2MouseUpFun);
}

functionp2MouseUpFun(e:MouseEvent):void{
p2.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP,p2MouseUpFun);
}上面是类的源代码
CODE:
packageindex.base.geom{

importflash.events.EventDispatcher;
importflash.display.DisplayObject;

importindex.base.events.DotEvent;

publicclassDotextendsEventDispatcher{

privatevar_x:Number;
privatevar_y:Number;
privatevardisisplayObject;

publicvarisListen:Boolean;

publicfunctionDot(x_:Number=0,y_:Number=0,_isListen:Boolean=false){
_x=x_;
_y=y_;
isListen=_isListen;
}

//绑定DisplayObject
publicfunctionbind(_disisplayObject,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;
}

//更新xy数据
publicfunctionupdata():void{
if(dis!=null){
_x=dis.x;
_y=dis.y;
}
}

//盘算该点与别的一点的间隔
publicfunctionfrom(_dotot,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(_dotot,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(_dotot,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;
}

//改动X坐标
publicfunctionsetx(num:Number):void{
_x=num;
if(dis!=null)dis.x=num;
if(isListen)dispatchEvent(newDotEvent(DotEvent.DOT_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.DOT_CHANGE,true));
}

//设置Y坐标
publicfunctiongety():Number{
updata();
return_y;
}
}
}
事务类的代码:CODE:
packageindex.base.events{

importflash.events.Event;

publicclassDotEventextendsEvent{

publicstaticconstDOT_CHANGE:String="dotChange";

publicfunctionDotEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false){
super(type,bubbles,cancelable);
}
}
}
Flash动画说到底就是“遮罩+补间动画+逐帧动画”与元件(主要是影片剪辑)的混合物,通过这些元素的不同组合,从而可以创建千变万化的效果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-9 20:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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