プレイヤーが加速度計を使用してオブジェクトを移動するマルチプレイヤーゲームをアンドロイドで作成しようとしています。最初に、TCP を使用して、加速度計に接続された onSensorChanged() 内で (SENSOR_DELAY_GAME を使用して)、プレーヤーの X & Y 座標を含むパケットを JSON 文字列として送信していました。しかし、遅延の問題のため、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()
また、別のスレッドとして実行する方法があるかどうかも疑問に思っていました...?