private var m_lcIndex:uint;
private var m_intervalID:uint;
private var m_localConnName:String;
private var m_so = SharedObject.getLocal("singleton", "/");
private var m_conn:LocalConnection = new LocalConnection();
private function checkOtherClient():void
{
clearTimeOut(this.m_intervalID);
this.m_lcIndex = this.m_so.data["lc_index"] || 0;
this.m_localConnName = "test" + this.m_lcIndex;//该名称可以定制成限制一个服务器多开
try
{
this.m_conn.client = this;
this.m_conn.allowDomain("*");
this.m_conn.connect(this.m_localConnName);
//没有其他客户端存在
//执行进入游戏逻辑
this.enterGame();
}
catch (e:Error)
{
this.m_conn.allowDomain("*");
this.m_conn.send(this.m_localConnName, "clientRequired");
this.m_conn.addEventListener(StatusEvent.STATUS, this.statusHandler);
this.m_intervalID = setTimeOut(this.connectFailed, 2000);//设定超时时间为2s
}
}
private function enterGame():void
{
//执行游戏逻辑
}
private function statusHandler(evt:StatusEvent):void
{
clearTimeOut(this.m_intervalID);
this.m_conn.removeEventListener(evt.type, this.statusHandler);
if (evt.level == "status")
{
//检测到其他客户端
trace("已经打开了其他客户端");
}
else
{
this.connectFailed();
}
}
private function connectFailed():void
{
clearTimeOut(this.m_intervalID);
this.m_conn.removeEventListener(StatusEvent.STATUS, this.statusHandler);
this.m_so.data["lc_index"] = this.m_lcIndex + 1;
this.m_intervalID = setTimeout(this.checkOtherClient, 50);//延迟继续检测
}
public function clientRequired():void
{
trace("又登陆了一个客户端了。");
}
最近参加的新项目里面对资源的管理比起老项目做了一点优化,其中一点我觉得值得推崇的是swf里面的资源都是位图导出类,不再使用MoviceClip和SimpleButton。因为这两个类都释放不了里面的位图资源。
先用一个简单的Button说明
使用ScaleBitmap这个类或者参考写一个,专门处理swf里面的位图资源。这里面的有个技巧需要说明,因为设置九宫格需要传入一个Rectangle,我们可以在fla里面的创建一个MC然后设置九宫格,拉好九宫格的线,然后在动作面板键入
trace(this.scale9Grid.toString());
利用当前输出的内容构造出Rectangle传入ScaleBitmap中,bingo了。最后记得把fla里面的刚创建的MC从库中移除不要保存起来。
《C和指针》里面特意说明了strlen需要注意的返回结果的类型是无符号类型,而这个不注意则会引发后面一些离奇的错误。
“if( strlen(x) - strlen(y) >= 0 )” 和 “if( strlen(x) - 10 >= 0)”是有区别的。
理由如下图: