操作脚本 3 - 智能狐狸服务器基本用户离开房间错误



用户 1 正在从 Flash 打开应用程序,用户 2 正在从浏览器打开应用程序

  • 用户 1 创建房间 A
  • 用户 2 加入聊天室 A
  • 用户 2 退出房间 A

。我收到此错误:

[ RECEIVED ]: <msg t='sys'><body action='uCount' r='2' u='1'></body></msg> , (镜头: 60)[ 接收 ]: <msg t='sys'><body action='userGone' r='89'><user id='91' /> , (镜头: 73)类型错误: 错误 #1009: 无法访问空对象引用的属性或方法。 at it.gotoandplay.smartfoxserver.handlers::SysHandler/handleUserLeaveRoom()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/handlers/SysHandler.as:353] at Function/http://adobe.com/AS3/2006/builtin::apply() at it.gotoandplay.smartfoxserver.handlers::SysHandler/handleMessage()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/handlers/SysHandler.as:84] at it.gotoandplay.smartfoxserver::SmartFoxClient/xmlReceived()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:327] at it.gotoandplay.smartfoxserver::SmartFoxClient/handleMessage()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:1418] at it.gotoandplay.smartfoxserver::SmartFoxClient/handleSocketData()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:1401]

  • 如果用户 2 创建房间 A
  • 用户 1 加入聊天室 A
  • 用户 2 退出房间 A

。当用户 2 退出房间时没有错误。

所以,我有一个将用户连接到服务器的按钮,当用户连接并加入"大厅"房间时,他可以加入并创建房间,当 2 名玩家加入时,游戏开始。

我正在使用带有 AS3 的 SFS Basic,我不会在任何地方调用 getRoomList(),我需要提到我有另一个与此类似的应用程序可以正常工作(相同的 api、相同的服务器、类似的函数流)。

尝试了不同的解决方案,但没有帮助...

我不明白为什么我在这个应用程序上收到此错误而另一个工作正常,为什么我只在创建房间时收到此错误,并且我希望在任何用户创建房间时收到错误,而不仅仅是在用户 1 创建房间时。

非常感谢任何帮助或建议,我正在为这个问题苦苦挣扎几天......

更新:如果我创建一个 3 人房间(游戏室)并且游戏没有启动并且我连接了 2 个玩家,然后他们断开连接一切正常,但如果游戏开始然后他们断开连接,我会收到此错误。

我发现了问题,我希望我用这个答案为某人节省一些时间:

问题是这一行:

sfs.getActiveRoom().getUserList().sort(randomize)[0].getName();

我使用此代码生成一个随机用户作为第一个玩的用户,但实际上似乎我正在更改用户列表数组(通过排序)(sfs.getActiveRoom().getUserList())以及用户何时离开房间。繁荣!错误!空对象!

所以,我用这个改变了:

   var userList:Array = new Array();
   userList = userList.concat(sfs.getActiveRoom().getUserList());
   var randomUser = userList.sort(randomize)[0].getName();

最新更新