快速业务通道

Flash MX 编程深层次应用-网络连线游戏(6)

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-10

7.4 在线用户列表区
???? 在线用户列表是联网对战类游戏中非常重要的环节。程序中通过一个数组存放在线用户的名单,然后根据游戏的状态来不断地更新这个数据中的内容,从而实现在线用户的快速、准确地更新。 先创建一个空的MC,名字叫objChatUserRecord,主要是放置一些基本函数,其代码如下: ??? var records =? new Array(); ??? //最多允许300个用户在线 ??? var max = 300; ??? function appendRecord(msg) { ??????? //增加一个新用户 ???????????? if(records.push(msg) > max ) ????????????????????? records.shift(); ??? } ??? function appendRecords(array) { ??????? //增加一批新用户 ???????????? var i ; ???????????? for(i=0; i < array.length; i++) ????????????????????? appendRecord(array[i]); ??? } ??? function removeAll() { ??????? //清除全部用户 ???????????? delete records; ??? ???????? records = new Array(); ??? } ??? function removeRecord(val) { ??????? //清除某个用户 ???????????? var i; ???????????? for(i = 0; i< records.length; i++) ????????????????????? if(records[i] == val) ??????????????????????????????? records.splice(i, 1); ??? } ??? function setMax(m) { ???????????? max = m; ??? } ??? function getRecord(idx) { ???????????? if(idx >= 0 && idx <= max) ????????????????????? return records[idx]; ???????????? else ????????????????????? return null; ??? } ??? function getSize() { ??????? //取用户数 ???????????? return records.length; ??? } ??? function toString(start, end) { ??????? //将这些用户名转化成字符串显示出来 ???????????? var i , ret; ???????????? for (ret ="", i =start; i< end ;i++) { ????????????????????? if(i >= 0 && i <= max) ??????????????????????????????? ret += records[i] + "\n"; ???????????? } ???????????? return ret; ??? } 进入画板列表的MC中,其程序如下: ??? //最大显示行数 ??? var maxLines = 18; ??? //是否自动滚动 ??? var autoScroll = false; ??? //从第几行开始 ??? var startLine = 0; ??? //用户列表初始为空 ??? var userlist = null; ??? //指向当前内容 ??? function attach(cr) { ???????????? userlist = cr;???????????????? ??? } ??? //设置自动滚动 ??? function setAutoScroll(auto) { ???????????? autoScroll = auto; ??? } ??? //重新更新文本显示框中的内容 ??? function refresh() { ???????????? if( autoScroll ==? true) { ????????????????????? startLine = userlist.getSize() - maxLines; ????????????????????? this.output = userlist.toString(startLine, userlist.getSize()); ???????????? } ???????????? else { ????????????????????? this.output = userlist.toString(startLine, startLine+maxLines); ???????????? } ??? } ??? //把从数组中X行开始的内容显示出来 ??? function showFromX(x) { ???????????? this.output = userlist.toString(x, x+maxLines);????????? ??? } ??? //翻到前一屏 ??? function prevPage() { ???????????? startLine -= maxLines; ???????????? if(startLine < 0) ????????????????????? startLine = 0; ???????????? showFromX(startLine); ??? } ??? //翻到后一屏 ??? function nextPage() { ???????????? startLine += maxLines; ???????????? if(startLine >= userlist.getSize()) ????????????????????? startLine = startLine - maxLines; ???????????? showFromX(startLine);??????? ??? } ??? //翻前一行 ??? function prev() { ???????????? startLine -= 1; ???????????? if(startLine < 0) ????????????????????? startLine = 0; ???????????? showFromX(startLine); ??? } ??? //翻后一行 ??? function next() { ???????????? startLine += 1; ???????????? if(startLine >= userlist.getSize()) ????????????????????? startLine = startLine - 1; ???????????? showFromX(startLine); ??? } 这段看上去好像都是一些基本函数,下面请看通信部分是如何使用这些基本函数的: function onXML_Receive(x) { …… ??? } else if (e.nodeName == "USR") { ??????? //如果是用户的登陆操作 ???????????? if (e.attributes.Value == "ON") { ??????????? //往用户列表数组追加一个新用户 ????????????????????? objChatUserRecord.appendRecord(e.attributes.Param); ????????????????????? objUserDisplay.attach(objChatUserRecord); ??????????? //重新更新用户列表显示 ????????????????????? objUserDisplay.refresh(); ????????????????????? if (_root.now_play_table == 0) { ??????????????????????????????? objChatDisplay.chat_display.HTMLText += sys+e.attributes.Param+" is Entering..."+newline; ????????????????????? } ???????????? } else if (e.attributes.Value == "OFF") { ?? ?????????//如果是一个用户离开操作,则从数组中删除该用户 ????????????????????? objChatUserRecord.removeRecord(e.attributes.Param); ????????????????????? objUserDisplay.attach(objChatUserRecord); ??????????? //重新更新用户列表显示 ????????????????????? objUserDisplay.refresh(); ????????????????????? if (_root.now_play_table == 0) { ??????????????????????????????? objChatDisplay.chat_display.htmlText += sys+e.attributes.Param+" is Leaving..."+newline; ????????????????????? } ????????????????????? objTableDisplay.removeName(e.attributes.Param); ????????????????????? if (trim(_root.rival) == trim(e.attributes.Param)) { ??????????????????????????????? // 说明对手非正常退出,不跟你下了。 ??????????????????????????????? _root.no_play(); ????????????????????? } ???????????? } else { …… 这段程序处理的是下面的XML格式字符串 其中PARAM表示用户名,ON表示联机,OFF则表示退出。 在右边的用户文本显示框的下方是滚动按钮,如图7-14所示。 图7-14 ??????????? 左边的是向上滚,程序如下: ??? on (release) { ???????????? prev(); ??? }右边的是向下滚,程序如下: ??? on (release) { ???????????? next(); ??? } 关键词:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号