仓酷云

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

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

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

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

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

x
ActionScript是一种程序语言的简单文本文件.FLA档案能够直接包含ActionScript。
后面进修了FlashAS3教程:运算符,明天进修的ApplySocket类,这个类是对socket使用就好了体系化封装,而且思索了良多要素,整合出来的一套,较为完美的flash程序部分socket办理计划
好比:一些socket服务端,纷歧定你send已往一条,他即刻就会转发,大概会有延时,大概数据堆在一同等征象,而有写socket服务端,在发送数据的时分,会有一些附加码等,如许倒霉于掏出实在数据
该类除一般的用法,就是对上述假定情形整合了一套办理计划,虽不是很完美,可是能办理年夜部分成绩,最少我碰着过的成绩,用这个类应当能够轻松弄定,而且能够合适更庞大的

别的光看解说,大概不年夜懂,供应了甚么办理计划,来办理下面这些成绩,因而,贫苦人人赖着性质,先过一到代码,然后在看前面的用法

index.base.net.ApplySocket类:
对socket举行封装,而且供应多种socket办理计划

机关函数:
publicfunctionApplySocket(_isSide:Boolean=false,_datatype:String="String")
第一参数,是不是利用包边,对数据举行处置,具体请看isSide属性
第二参数,默许数据公布范例
假如机关函数中两个参数都是用默许值,则该类只是一个普一般通的socket类

connect办法:
publicfunctionconnect(_host:String,_port:int):void
毗连远程socket服务端
第一参数:主机地点,能够是202.89.***.***,大概www.*****.com如许的
第二参数:毗连的端标语

send办法:
publicfunctionsend(...strs):void
发送数据到socket服务端
假如datatype为Object大概ArrayObject的时分,send办法传进的参数必需年夜于大概即是两个!不然会激发毛病!

close办法:
publicfunctionclose():void
封闭与远程服务端毗连

connect事务:
当毗连上了以后,会调剂该事务

close事务:
当socket封闭后,会调剂该事务

sync事务:
当无数据必要同步的时分,会调剂该事务

error事务:
当毗连失利的时分,会调剂该事务

静态常量:
publicstaticconstARRAY:String="Array";
publicstaticconstSTRING:String="String";
publicstaticconstOBJECT:String="Object";
publicstaticconstARRAY_ARRAY:String="ArrayArray";
publicstaticconstARRAY_OBJECT:String="ArrayObject";
分离暗示datatype的5品种型

host属性:
publicvarhost:String;
当connect后,会主动把主机地点纪录到该值上

port属性:
publicvarport:int;
当connect后,会主动把毗连端标语纪录到该值上

space属性:
publicvarspace:String="";
当send传进2个大概2个以上参数时,接纳何种值举行离隔,默许是空格,假如将值改成"",则暗示不必距离举行离隔

ls属性:
publicvarls:String="{";
当isSide为true的时分,放在右边所利用的暗号

rs属性:
publicvarrs:String="}";
当isSide为true的时分,放在右侧所利用的暗号

connected属性:
publicvarconnected:Boolean;
前往socket是不是已毗连上

isSide属性:
publicvarisSide:Boolean;
是不是加上包边处置
假如该值为true,则暗示,send传进的参数都将会用rs和ls包起来举行传输到socket端,当socket原版前往数据的时分,在利用正则将真实的数据掏出来,而且以datatype范例前往
反之,则不做任那边理。

datatype属性:
publicvardatatype:String;
公布同步事务的时分,data接纳何品种型前往
String:以字符串前往,就是说传进甚么前往甚么

Array:以数组前往,选择利用Array前往的时分,isSide值必需为true,不然没法断点找出数组,道理就是,经由过程利用lsrs两个标记包起来,然后利用正则把标记中的数据提掏出来,而且前往数组。假如,socket服务端,大概还会抛出其他数据给客户端,那末接纳isSide包边处置,则socket回传的数据,该类会主动处置,将send进来的数据底本拿上去,回传数据不受影响

Object:以Object前往,假如send已往的数据,都是以一个变量名一个参数值来传输的,那末能够接纳Object来吸收数据,如许的话,前往data中,间接前往send出来的第一个参数,便可取得值(该范例不经常使用,一样平常只在特别情形利用)

ArrayArray:以数组嵌套数组的情势前往数据,假如socket的实行效力不是很高,大概同步请求不是很高,那末客户端send一次,一定会吸收到同步事务,大概会聚积在一同,一同发送到客户端,这个时分,就能够接纳ArrayArray的情势,那末该类会帮你把send已往的数据,从头分别,而且以一个数组为一个send数据的情势前往,很利于做连连看,对对碰相似同步不是很立即,良多个举措能够聚积到一同来发送

ArrayObject:以数组嵌套Object的情势前往数据,不外多说,只不外是Array加上Object的切合形式罢了(该范例也不经常使用)

Object与ArrayObject,很合适用在群谈天室,好比send("sunbright","人人好{哈哈}");那末立即你在措辞的内容加了良多怪怪标记,好比加上分开符,空格等等,由于Object的剖析道理是,拿出第一个参数做为援用变量名,然后把前面的一切数据赋值给这个援用变量名来前往,一切前面的数据不论怎样,都是不会损坏数据内容,即失掉data数据后只需前往data的sunbright值,便可失掉措辞内容,不会由于格局毛病,而把措辞的内容有所改动

该类的感化在datatype属性中,讲了良多器材
上面讲讲使用:
该类的关头就在于isSide和datatype两个值,
假如isSide为true,那末就即是启用了数据包边处置,那末当你挪用send办法传进某些参数,只需socket方做到的是,传出来甚么他前往给你甚么,那末经由过程同步事务,又会主动把处置过的数据,拿出来,做到数据的正确性,不会由于传了良多参数,偶然候会杂乱。

而当datatype的属性改动后:
前往给你的数据,就做了一些处置,如许程序拿到终极数据的时分,基本不必处置,就能够间接利用,由于该类已把必要办理的成绩,弄定了
好比数据范例是ArrayArray的时分,请看上面的例子:
上面是一个同步的例子,吸收到的数据范例是ArrayArray,拿到数据以后for轮回一下,把该放的数据,放到响应地位,则完成同步。程序年夜年夜简化了,不会我们拿到数据了还要处置,假如是第一次玩socket的,一定还会碰着良多怪怪成绩,好比数据不合错误,拿出来的数占有成绩,还要举行分段处置甚么的
CODE:
privatefunctionsyncFun(e:ApplySocketEvent):void{
vartmpAr:Array=e.dataasArray;
for(vari:int=0;i<tmpAr.length;i++){
varar:Array=tmpAr;
var_index:String=ar[1];
if(_index!=index&&(has(_index)||ar[0]=="create")){
switch(ar[0]){
case"create":
createTank(_index);
break;
case"move":
varmoveStr:String=ar[2];
varmoveAr:Array=moveStr.split("");
get(_index).move(expBoo(moveAr[0]),expBoo(moveAr[1]),expBoo(moveAr[2]),expBoo(moveAr[3]));
moveAr=null;
break;
case"bullet":
get(_index).bullet();
break;
case"shell":
get(_index).shell();
break;
case"turn":
varturnStr:String=ar[2];
varturnAr:Array=turnStr.split("");
get(_index).turn(expBoo(turnAr[0]),expBoo(turnAr[1]));
break;
}
}
ar=null;
}
tmpAr=null;
}假如没看懂,另有虾米成绩,就跟贴吧。。。


ApplySocket类源代码:
CODE:
packageindex.base.net{

importflash.events.EventDispatcher;
importflash.events.ProgressEvent;
importflash.events.IOErrorEvent;
importflash.events.Event;
importflash.net.Socket;

importindex.base.events.ApplySocketEvent;

publicclassApplySocketextendsEventDispatcher{

privatevarsocket:Socket;

publicstaticconstARRAY:String="Array";
publicstaticconstSTRING:String="String";
publicstaticconstOBJECT:String="Object";
publicstaticconstARRAY_ARRAY:String="ArrayArray";
publicstaticconstARRAY_OBJECT:String="ArrayObject";

publicvarhost:String;
publicvarport:int;
publicvarspace:String="";
publicvarls:String="{";
publicvarrs:String="}";
publicvarisSide:Boolean;
publicvardatatype:String;
publicvarconnected:Boolean=false;

publicfunctionApplySocket(_isSide:Boolean=false,_datatype:String="String"){
isSide=_isSide;
datatype=_datatype;
}

//毗连
publicfunctionconnect(_host:String,_port:int):void{
host=_host;
port=_port;

if(connected)socket.close();
socket=newSocket;
socket.connect(host,port);
socket.addEventListener(IOErrorEvent.IO_ERROR,errorFun);
socket.addEventListener(Event.CONNECT,connectFun);
}

//发送
publicfunctionsend(...strs):void{
if(datatype==OBJECT||datatype==ARRAY_OBJECT){
if(strs.length<2)thrownewError("当数据范例即是Object大概ArrayObject的时分,send办法传进参数必需两个大概两个以上!");
}

varstr:String="";
for(vari:int=0;i<strs.length;i++){
str+=strs;
if(i!=strs.length-1)str+=space;
}
if(isSide)str=ls+str+rs;
socket.writeUTFBytes(str);
socket.flush();
}

//断开
publicfunctionclose():void{
clearEvent();
connected=false;
socket.close();
socket=null;
}

//毗连事务
privatefunctionconnectFun(e:Event):void{
connected=true;
clearEvent();
socket.addEventListener(ProgressEvent.SOCKET_DATA,socketDataFun);
socket.addEventListener(Event.CLOSE,closeFun);
dispatchEvent(newApplySocketEvent(ApplySocketEvent.CONNECT));
}

//封闭事务
privatefunctioncloseFun(e:Event):void{
connected=false;
dispatchEvent(newApplySocketEvent(ApplySocketEvent.CLOSE));
}

//失利事务
privatefunctionerrorFun(e:IOErrorEvent):void{
close();
dispatchEvent(newApplySocketEvent(ApplySocketEvent.ERROR));
}

//吸收事务
privatefunctionsocketDataFun(e:ProgressEvent):void{
vari:int;
vartmp:Object=socket.readUTFBytes(socket.bytesAvailable);
if(isSide){
tmp=tmp.match(newRegExp(""+ls+"[^"+rs+"]*"+rs,"g"));
for(i=0;i<tmp.length;i++){
varstr:String=tmp;
tmp=str.substr(1,str.length-2);
}
}

switch(datatype){
caseSTRING:
if(tmpisArray)tmp=tmp.join("");
break;
caseARRAY:
if(tmpisString)thrownewError("毛病!假如数据范例选择Array,那末isSide必需为true!");
break;
caseOBJECT:
if(tmpisArray)thrownewError("毛病!假如数据范例选择Object,那末isSide必需为false!");
tmp=change(tmpasString);
break;
caseARRAY_OBJECT:
if(tmpisString)thrownewError("毛病!假如数据范例选择ArrayObject,那末isSide必需为true!");
for(i=0;i<tmp.length;i++)tmp=change(tmp);
break;
caseARRAY_ARRAY:
if(tmpisString)thrownewError("毛病!假如数据范例选择ArrayArray,那末isSide必需为true!");
for(i=0;i<tmp.length;i++)tmp=tmp.split(space);
break;
}

vareve:ApplySocketEvent=newApplySocketEvent(ApplySocketEvent.SYNC);
eve.data=tmp;
dispatchEvent(eve);

tmp=null;
eve=null;
}

//清算事务侦听
privatefunctionclearEvent():void{
if(socket!=null){
if(socket.hasEventListener(IOErrorEvent.IO_ERROR))socket.removeEventListener(IOErrorEvent.IO_ERROR,errorFun);
if(socket.hasEventListener(Event.CONNECT))socket.removeEventListener(Event.CONNECT,connectFun);
if(socket.hasEventListener(ProgressEvent.SOCKET_DATA))socket.removeEventListener(ProgressEvent.SOCKET_DATA,socketDataFun);
if(socket.hasEventListener(Event.CLOSE))socket.removeEventListener(Event.CLOSE,closeFun);
}
}

//转换Object
privatefunctionchange(tmp:String):Object{
vartmpAr:Array=tmp.split(space);
varobj:Object=newObject;
obj[tmpAr.shift()]=tmpAr.join(space);
tmpAr=null;
returnobj;
}
}
}ApplySocketEvent事务类源代码
CODE:
packageindex.base.events{

importflash.events.Event;

publicclassApplySocketEventextendsEvent{

publicstaticconstCONNECT:String="connect";
publicstaticconstCLOSE:String="close";
publicstaticconstSYNC:String="sync";
publicstaticconstERROR:String="error";

publicvardata:Object;

publicfunctionApplySocketEvent(type:String){
super(type);
}
}
}

借助令人兴奋的全新3D平移和旋转工具,通过3D空间为2D对象创作动画,您可以沿x、y、z轴创作动画。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-16 16:42:20 | 只看该作者

动画教程之Flash AS3教程:ApplySocket类-Flash actionscript

目前动画广告在各类电视节目中有着广泛的应用,在影视及广告中占有重要地位。广州形动数码是国内领先的动画设计制作,
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-18 18:54:36 | 只看该作者
祯率越高,动画中可包容的信息越多,动画看起来越光滑和流畅。当然,当祯率增加时,计算机的CPU的重绘工作越多,运行得就越慢。
蒙在股里 该用户已被删除
地板
发表于 2015-1-27 18:26:14 来自手机 | 只看该作者
向量图有一个特点,就是放大后的图像是不会改变的. 点阵图 向量图Flash的应用,还有再不断在完善的Action Script脚本语言。
山那边是海 该用户已被删除
5#
发表于 2015-2-5 14:45:40 | 只看该作者
缺点方面~有些技术不能实现,不过FLASH技术在发展在进步,相信在以后FLASH可以取代,大部分的视频编辑软件,视频制作软件。
精灵巫婆 该用户已被删除
6#
发表于 2015-2-12 09:44:17 | 只看该作者
原始动画为单纯的手绘,累而且费时耗资严重,随着科技的发展应运而生了很多制作动画的软件,然而flash在各个方面的应用尤为广泛,作用最为突出,具有一定的影响力。
小妖女 该用户已被删除
7#
发表于 2015-3-3 02:36:04 | 只看该作者
常见的富媒体广告形式有横幅广告(BANNER,旗帜广告)按钮广告(BUTTON)弹出窗口广告(pop-up ads,弹窗)浮动广告(floting ads,飘浮广告,floaters)插播式广告(Interstitial)全屏广告(full screen) 
简单生活 该用户已被删除
8#
发表于 2015-3-11 09:24:32 | 只看该作者
FLASH的优点~你用眼睛所看到的东西~都能用它来实现~一点不夸张~高楼大厦-花草树木-高山流水-天空白云-阿猫阿狗-一切活的东西都可以容入到FLASH里面
若天明 该用户已被删除
9#
发表于 2015-3-18 10:24:32 | 只看该作者
在网络营销中所提供的利益。如果我们仔细看看国内外的专业网站,很少看到应用FLASH格式的广告,如网络上的知名网站。相信它们并不缺乏FLASH图片的制作力量。
因胸联盟 该用户已被删除
10#
发表于 2015-3-25 23:06:01 | 只看该作者
随着动画的日益发展壮大,动画片在世界范围影响里越来越大,广告、网页、电影各个方面都应用到了动画。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 20:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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