用户 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();