AS3.0第四讲(王彦林)
- 格式:ppt
- 大小:1.23 MB
- 文档页数:24


package ...{import flash.display.Sprite;import it.gotoandplay.smartfoxserver.SmartFoxClient;import it.gotoandplay.smartfoxserver.SFSEvent;import it.gotoandplay.smartfoxserver.data.*;import flash.display.MovieClip;import fl.controls.*;import flash.events.MouseEvent;import fl.events.ListEvent ;import flash.events.Event;/** *//*** @author asfox*/public class main extends Sprite ...{private var __sfsClient : SmartFoxClient;//sfs客户端private var __ip : String;//连接ipprivate var __port : uint;//连接的端口private var __usrNmae:String;//登入的用户名private var __zone:String;//登入的区域public function main() ...{__init();}//初始化界面并连接SFS服务器private function __init():void ...{__ip="127.0.0.1";__port=9339;__zone="simpleChat";__selectedUsr="";tips_mc.visible=false;login_mc.visible = false;chat_mc.visible = false;__connectSfs(__ip,__port);}//初始化事件private function __initEvt() : void ...{//初始化SFS客户端事件__sfsClient.addEventListener(SFSEvent.onConnection, __onConnect);__sfsClient.addEventListener(SFSEvent.onConnectionLost, __onConnectionLost); __sfsClient.addEventListener(SFSEvent.onRoomListUpdate, __onRoomUpdate); __sfsClient.addEventListener(SFSEvent.onJoinRoom, __onLoginRoom);__sfsClient.addEventListener(SFSEvent.onUserEnterRoom, __onUserEnterRoom);__sfsClient.addEventListener(SFSEvent.onUserLeaveRoom, __onUserLeaveRoom);__sfsClient.addEventListener(SFSEvent.onPublicMessage, __onPublicMsg);//初始化界面按钮事件login_mc.login_btn.addEventListener(MouseEvent.CLICK, __onLogin);chat_mc.send_btn.addEventListener(MouseEvent.CLICK, __sendChatMsg);}//发送公共消息private function __sendChatMsg(e:MouseEvent)...{//如果输入文本不为空就调用SFS客户端的sendPublicMessage 方法发送公共消息,并把输入文本置为空;if (chat_mc.input_txt.text.length > 0)...{__sfsClient.sendPublicMessage(chat_mc.input_txt.text)chat_mc.input_txt.text = ""}}//处理接收公共消息事件private function __onPublicMsg (e:SFSEvent):void...{//将接收到的信息显示出来trace("User " + e.params.sender.getName() + " said: " + e.params.message)chat_mc.chat_txt.text+="\n"+e.params.sender.getName()+" said :"+e.params.message;}//处理用户离开房间的事件private function __onUserLeaveRoom(e:SFSEvent):void...{//在列表中删除离开的用户var usrId=erId ;var userList_lb=chat_erList_dg;for (var i:Number = 0; i < userList_lb.length; i++)...{var item:Object = userList_lb.getItemAt(i);if (item.data == usrId)...{var usrName:String = bel;userList_lb.removeItemAt(i);break;}}userList_lb.sortItemsOn("label", 1);chat_mc.chat_txt.text+="\n"+usrName+" logout !";}//处理当有其他用户进入房间时的事件private function __onUserEnterRoom(e:SFSEvent):void...{//将其他用户加入列表并排序var tmpUser=er;chat_erList_dg.addItem(...{label:tmpUser.getName(),data:tmpUser.getId()});chat_erList_dg.sortItemsOn("label", 1);chat_mc.chat_txt.text+="\n"+tmpUser.getName()+" jion the room !";}// 当自己进入房间时private function __onLoginRoom(e:SFSEvent):void...{//获取房间的用户列表并在list 组件里显示出来var tmpRoom:Room= e.params.roomvar userList:Array = tmpRoom.getUserList()chat_erInfor_txt.text="login as >> "+__usrNmae;chat_erList_dg.removeAll();for (var i:String in userList)...{trace("login>> "+userList[i].getName());var user:User = userList[i]var tmpLabel=user.getName();var tmpData=user.getId();trace(tmpLabel,tmpData);chat_erList_dg.addItem(...{label:tmpLabel,data:tmpData});chat_mc.chat_txt.text+="\n"+tmpLabel+" jion the room !";}chat_erList_dg.sortItemsOn("label", 1);}//在房间更新是加入房间注意这里用的是自动加入房间,如果没有在服务器端的的config.mxl里设置自动加入房间就不能用自动加入。
flash常用代码!(精)flash, 代码flash AS3的全屏代码:this.stage.displayState=StageDisplayState.FULL_SCREEN; 退出代码:tc_btn.addEventListener(MouseEvent.CLICK, tuichu);//给overbtn这个按钮添加鼠标点击执行tuichu函数的侦听function tuichu(event:MouseEvent):void {fscommand("quit");//鼠标点击执行tuichu时swf退出}时间轴上停止代码:this.stop()按钮代码:红色代码为自定义函数,同一按钮中相同,不同按钮必须不同以区别开来。
播放和停止bf_btn.addEventListener(MouseEvent.CLICK,work1);function work1(event:MouseEvent){this.play()}tz_btn.addEventListener(MouseEvent.CLICK,work2);function work2(event:MouseEvent){this.stop()}跳转代码shou_btn.addEventListener(MouseEvent.CLICK,work1);function work1(event:MouseEvent){gotoAndStop("首页");}tz_btn.addEventListener(MouseEvent.CLICK,work2);function work2(event:MouseEvent){gotoAndPlay(1);}逐帧代码:xy_btn.addEventListener(MouseEvent.CLICK,work1);function work1(event:MouseEvent){this.nextFrame()}Sy_btn.addEventListener(MouseEvent.CLICK,work2);function work2(event:MouseEvent){this.prevFrame()}按钮控制影片剪辑tz_btn.addEventListener(MouseEvent.CLICK,work1);function work1(event:MouseEvent){this.ai_mc.gotoAndPlay(3)}按钮暂停代码;(1)控制主场景暂停的方法是,在舞台上建立个播放暂停按钮,起名pause_btn。
2、URLStream和URLLoaderURLStream在文本文档数据方面可以支持多种字符编码。
URLLoader在进过测试后,发现除UTF-8字符编码外,其他字符编码读过来的数据都是乱码。
(补,可通过ByteArray对象字符编码转换)Loader在试用Loader来加载数据时,添加侦听事件时,注意一定要给Loader的contentLoaderInfo 属性增加事件,而不是给Loader对象增加事件。
我就是因为加错对象(关键是编译时还没有报错),郁闷得差点要把电脑给扔了在调试flash过程发现,如果把swf文档放到html页面后,stage.stageWidth和stage.stageHeight 在第一次加载调用时,他们的值为空值;Base64是一个String便于socket传递,在某个客户想向另外一个客户端呈现只有自己有的图片时,就不需要将图片上传到服务器,再把链接发给另外一个客户端,而另外一个客户端得到链接之后,去服务器下载这张图片,再表现出来。
可以把图片转成base64,然后直接传给另一个客户端,另外一个客户端收到之后转byteArray再转bitmapdata,就可以表现了。
只是一句话的经验之谈,忽然想到的,记下来,以后可能会找到更有价值的应用。
有时候我们需要将某个数组清空或者说重置,我最常用的办法的是重新new一下,但是有人测试研究发现使用length=0的方法,执行效率是最高的PopUpManager的机制基本上已经将显示对象置于顶层了,而且,如果你想试图在stage上addchild是不可行,至少我这里是不可行,会报索引错误,尝试很多方法,比如监听addtostage 事件,或者跟踪popup出来的显示对象,交换层级,都不行。
答案是用TooltipManager来创建一个Itooltip,试验发现Itooltip始终是置于最上方的,后面的事情就该你自己想了。
有时候我们需要将某个数组清空或者说重置,我最常用的办法的是重新new一下,但是有人测试研究发现使用length=0的方法,执行效率是最高的获取类名:传进一个object,返回类的全名var loader:URLLoader = new URLLoader( );var className:String = getQualifiedClassName(loader);trace(className); // Displays .URLLoader获取父类的类名:传进一个object,返回父类的类名var loader:URLLoader = new URLLoader( );var className:String = getQualifiedSuperclassName(loader);trace(className); // Displays flash.events.EventDispatcher根据类名取类var cla ssReference:Class = Class(getDefinitionByName(”.URLLoader”));//一但你得到了类的引用后,就可以这样var instance:Object = new classReference( );getQualifiedClassName( ) 或getQualifiedSuperclassName( ) 与getDefinitionByName() 结合使用的例子:var loader:URLLoader = new URLLoader( );var className:String = getQualifiedClassName(loader);var classReference:Class = Class(getDefinitionByName(className));var instance:Object = new classReference( );Introspection:describeType( )返回对象的类型描述var map : Array = new Array();map[ key ] = value;跳帧后取参数问题:MovieControler.playToFrame(mc,2);MovieControler.dispatcher.addEventListener(PLETE,complete);function complete(evt:Event){trace(evt.movie.numChildren);}自己写个类,好像在谁的贴里发过,这样就可以访问了.这事件是在帧播过去之后发出的.我的做法是用enterFrame一直刷到找到元件为止屡试不爽1.Falsh 居中!Body css 改成:margin:0 auto;padding:0;text-align:center;内存回收AS3开发需要注意的地方:1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失;6.父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;7.如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。