我正在尝试在 android 上制作多人游戏,其中玩家使用加速度计来移动物体。最初,我使用 TCP 发送数据包,其中包含玩家的 X 和 Y 坐标作为 JSON 字符串,在连接到加速度计的 onSensorChanged() 内(使用 SENSOR_DELAY_GAME)。但由于延迟问题,我决定尝试 UDP。
现在早些时候,我创建了一个单独的线程,它创建了一个新的套接字,我使用了以下代码:
public void onSensorChanged(SensorEvent event) {
// Other Stuff
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(coords.toString());
}
我有:
socket = new Socket(serverAddr, Port);
在另一个线程中。
由于UDP没有提供任何这样的方法来从主线程发送数据NetworkOnMainThreadException
,我想我必须在另一个线程中进行数据包传输。但问题是我正在计算要在 内部onSensorChanged()
发送的数据,并且我想在每次onSensorChanged()
调用时发送一个数据包。
我对 Java 和多线程比较陌生,并尝试阅读有关同步的内容,但似乎无法在此处正确理解和实现它。因此,如果有人能指出解决此问题的方法,我将不胜感激。我还想知道在每个SensorChange发送坐标是否是个好主意,以及是否有办法优化数据,以便我仍然可以使用 TCP 而不会出现延迟问题。而且我还想知道是否有任何可能的方法可以onSensorChanged()
作为单独的线程运行......?