SmartFoxServer 基本用户离开房间错误
SmartFoxServer Basic user leaveRoom error
用户 1 从 Flash 打开应用程序,用户 2 从浏览器打开应用程序
- 用户 1 创建房间 A
- 用户 2 加入房间 A
- 用户 2 退出房间 A
...我收到此错误:
[已收到]:<code><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:无法访问空对象引用的 属性 或方法。
在 it.gotoandplay.smartfoxserver.handlers::SysHandler/handleUserLeaveRoom()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/handlers/SysHandler.as:353]
在函数/http://adobe.com/AS3/2006/builtin::apply()
在 it.gotoandplay.smartfoxserver.handlers::SysHandler/handleMessage()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/handlers/SysHandler.as:84]
在 it.gotoandplay.smartfoxserver::SmartFoxClient/xmlReceived()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:327]
在 it.gotoandplay.smartfoxserver::SmartFoxClient/handleMessage()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:1418]
在 it.gotoandplay.smartfoxserver::SmartFoxClient/handleSocketData()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:1401]
- 如果用户 2 创建房间 A
- 用户 1 加入房间 A
- 用户 2 退出房间 A
...用户2退出房间没有报错
所以,我有一个将用户连接到服务器的按钮,当用户连接并加入 "lobby" 房间时,他可以加入并创建房间,当 2 个玩家加入时,游戏开始。
我正在将 SFS Basic 与 AS3 一起使用,我没有在任何地方调用 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();
用户 1 从 Flash 打开应用程序,用户 2 从浏览器打开应用程序
- 用户 1 创建房间 A
- 用户 2 加入房间 A
- 用户 2 退出房间 A
...我收到此错误:
[已收到]:<code><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:无法访问空对象引用的 属性 或方法。
在 it.gotoandplay.smartfoxserver.handlers::SysHandler/handleUserLeaveRoom()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/handlers/SysHandler.as:353]
在函数/http://adobe.com/AS3/2006/builtin::apply()
在 it.gotoandplay.smartfoxserver.handlers::SysHandler/handleMessage()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/handlers/SysHandler.as:84]
在 it.gotoandplay.smartfoxserver::SmartFoxClient/xmlReceived()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:327]
在 it.gotoandplay.smartfoxserver::SmartFoxClient/handleMessage()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:1418]
在 it.gotoandplay.smartfoxserver::SmartFoxClient/handleSocketData()[/Users/Lapo/Documents/Flex 生成器 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:1401]
- 如果用户 2 创建房间 A
- 用户 1 加入房间 A
- 用户 2 退出房间 A
...用户2退出房间没有报错
所以,我有一个将用户连接到服务器的按钮,当用户连接并加入 "lobby" 房间时,他可以加入并创建房间,当 2 个玩家加入时,游戏开始。
我正在将 SFS Basic 与 AS3 一起使用,我没有在任何地方调用 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();