私はjavaでゲームを作成していて、そのためのマルチプレーヤーを作成しようとしています。ゲームが最初に開始され、レベルが読み込まれ、クライアントがクライアント側のプレーヤーリストに追加されると、クライアントはリストを繰り返し処理し、サーバーが指示した場合はさらに追加しますが、問題は、ゲームが最初に開始されたときに「ArrayIndexOutOfBoundsException」が発生することです。ゲームにそれを無視するように指示しました。問題を解決できないようです。
私はそれが新しいプレーヤーの作成とスレッドが彼らの仕事をするのにかかる時間と関係があると思いますが、誰かが助けてくれることを望んでいました!
メッセージvarは、次のようにフォーマットされたサーバーから受信した文字列です。
名前;アドレス;posX;posY; fakeRotation;ローテーション;ローテーションスピード;スピード;sheildEnabled;sheildHealth; health
サーバーが送信するものの例を次に示します。
Luke;/127.0.0.1:53701;50.0;50.0;0.0;0.0;0.0;0.0;true;100;100
変数は次のとおりです。
String[] decrypted = message.split(",");
String[] commands = decrypted[x].split(";");
これが私を悩ませているコードの一部です:
boolean newPlayer = true;
if(Main.level.playerList != null)
{
try
{
for(int p = 0; p < Main.level.playerList.size(); p++)
{
if(Main.level.playerList.get(p).address.toString().equals(commands[1]))
{
newPlayer = false;
break;
}
}
if(newPlayer)
{
Player player = new Player(50, 50, 100, 150, commands[1], Main.level.shipImage1, Main.level.thrusterFlamesSprite1, Main.level.shieldSprite1);
Main.level.playerList.add(player);
}
for(int p = 0; p < Main.level.playerList.size(); p++)
{
Player player = Main.level.playerList.get(p);
if(player.address.equals(commands[1]))
{
// name:address:posX:posY:fakeRotation:rotation:rotationSpeed:speed:sheildEnabled:sheildHealth:health
player.name = commands[0];
player.address = commands[1];
player.pos[0] = Double.parseDouble(commands[2]);
player.pos[1] = Double.parseDouble(commands[3]);
player.fakeRotation = Float.parseFloat(commands[4]);
player.rotation = Float.parseFloat(commands[5]);
player.rotationSpeed = Double.parseDouble(commands[6]);
player.speed = Double.parseDouble(commands[7]);
player.sheildEnabled = Boolean.parseBoolean(commands[8]);
player.sheildStrength = Integer.parseInt(commands[9]);
//player.health = Integer.parseInt(commands[10]);
}
}
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Array index out of bounds, continuing.");
e.printStackTrace();
}
}
うまくいけば、誰かが助けてくれるといいのですが、私が言ったように、「新しい」アイテムを追加することと関係があると思いますが、それを機能させる方法が見つかりません!
私が受け取るスタックトレースは次のとおりです。
java.lang.ArrayIndexOutOfBoundsException: 1
at multiplayer.Translator.interperate(Translator.java:28)
at multiplayer.GameClient.run(GameClient.java:81)
前もって感謝します!