在 libgdx 游戏中使用 MPC 框架接收数据时出现错误

Bug in receiving data using MPC framework in libgdx game

我们正在尝试在 libgdx 游戏中使用 MPC 框架在两个设备之间建立多点连接。

我们通常成功完成的事情:

  1. 设备正在连接,会话正在正确建立。
  2. 会话建立后nearBrowser和nearAdvertiser停止 做他们的事。
  3. 然后我们过渡到游戏场景。新场景一机 可以给别人发消息。
  4. Session Delegate 的 DidReceiveData 方法被调用 我们为这两种设备提供了正确的消息。
  5. 在此之后我们向 libgdx 发送更新内容的消息(在主 gdx 线程)。

但一段时间后,当某些设备收到数据时,它会立即崩溃。有时它发生在第 10 次接收,有时发生在第 200 次之后。崩溃仅出现在收到消息的设备上。他们连接多长时间并不重要。在所有方法完成数据处理后出现崩溃。所以我们不知道具体错误发生在哪里。

// MCSession delegate method

public void didReceiveData(MCSession session, NSData data, MCPeerID peerID) {

 //there we make userInfoData

 // 
 DispatchQueue.getMainQueue().async(new Runnable() {
  @Override
  public void run() {
        NSNotificationCenter.getDefaultCenter().postNotification(new NSString("didReceiveData"), null,  userInfoData);
  }
  });

}

// Register observer in NSNotificationCenter
// NSNotificationCenter.getDefaultCenter().addObserver(this, Selector.register("updateDataWithNotification:"), new NSString("didReceiveData"), null);

// This method is called when device has received new data

@Method
private void updateDataWithNotification(NSNotification notification){

 userInfoDict = notification.getUserInfo();
 data = (NSData) userInfoDict.get(new NSString("data"));
 strBytes =  new String(data.getBytes());

 // i'm not sure this Gdx.app.postRunnable is really needed         
 Gdx.app.postRunnable(new Runnable() {
    @Override
    public void run() { 
  SBGlobalMessanger.getInstance().readBluetoothMessage(BluetoothData.RC_MESSAGE, strBytes);
    }
 });
}

问题是: 错误在哪里?我们该如何解决?

问题出在 robovm 插件中。在调试模式下,它使构建崩溃。制作发布后,构建错误消失了。在使用 robovm + libgdx 后我学到的是,如果你有奇怪的错误,只需制作一个发布版本。似乎这种错误在 robovm 1.3 的最后一个版本中被消除了(我还没有尝试过)。