Hallo Community,
ich bin momentan dabei ein Server-Client Spiel zu schreiben, bis jetzt geht es nur um die Anzeige der Spielerpositionen...
Wenn ich z.B. 3 Spieler hinzufüge, werden alle 3 Spieler auch gezeichnet, das ist kein Problem, jedoch wenn ich dann einen Spieler entferne, wird er immernoch gezeichnet, obwohl die Ausgabe des Arrays bestätigt, dass es dann nur noch 2 Spieler sind!
Was mache ich falsch?
In dieser Datei wird alles gezeichnet:
Bei der Console von Eclipse, erkennt man die Zahl 2, welche für aktuelle Spieler steht, jedoch werden immernoch 3 gezeichnet?! Die Zahl 2 kommt vom Server, welche via XML-Daten an den Client schickt.
ich bin momentan dabei ein Server-Client Spiel zu schreiben, bis jetzt geht es nur um die Anzeige der Spielerpositionen...
Wenn ich z.B. 3 Spieler hinzufüge, werden alle 3 Spieler auch gezeichnet, das ist kein Problem, jedoch wenn ich dann einen Spieler entferne, wird er immernoch gezeichnet, obwohl die Ausgabe des Arrays bestätigt, dass es dann nur noch 2 Spieler sind!
Was mache ich falsch?
In dieser Datei wird alles gezeichnet:
Java:
package org.game.gui;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.net.Socket;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import org.game.client.DataHandler;
import org.game.client.SharedData;
import org.game.ressource.Player;
public class MainPanel extends JPanel {
/*
* GameInfo
*/
private DataHandler handler = null;
private Player[] currentPlayers = null;
private SharedData data = null;
/*
* Graphical Inits.
*/
private Image backBuffer = null;
Image img = null; // TestImage
public MainPanel(SharedData data, Socket socket) throws Exception
{
this.data = data;
this.handler = new DataHandler(socket, this);
testPrepare();
init();
gameloop();
}
private void testPrepare() {
handler.send("POST /createGame?name="+data.getCurrentGameName()+"&maxPlayers=10 URLGS/1.0");
handler.send("POST /addNewPlayer?playerName="+data.getCurrentPlayerName()+"&playerPositionX=500&playerPositionY=52&game="+data.getCurrentGameName()+" URLGS/1.0");
// handler.closeConnection(data.getCurrentGameName(), data.getCurrentPlayerName());
}
/*
* Initialisieren
* Spielname festlegen
*
* Spieler / Position abfragen
*/
public void init()
{
setDoubleBuffered(false);
try {
img = ImageIO.read(new File("pic/blue.PNG"));
} catch(Exception e)
{
e.printStackTrace();
}
handler.recieve();
handler.send("GET /commonRequest?game=XYZ URLGS/1.0");
//Draw BackBufferImage
renderScreen();
//Set BackBuffer to Front
updateScreen();
}
private void gameloop()
{
Thread loop = new Thread() {
@Override
public void run()
{
try
{
while(true)
{
handler.send("GET /refreshPositionGet?game=XYZ URLGS/1.0");
renderScreen();
updateScreen();
Thread.sleep(1000);
}
} catch(Exception e)
{
e.printStackTrace();
}
}
};
loop.start();
}
/*
*
*
* Graphic Methods
*
*
*
*/
public void renderScreen()
{
if(backBuffer==null)
{
createBackBuffer();
} else
{
Graphics graph = backBuffer.getGraphics();
if(currentPlayers!=null)
{
System.out.println(currentPlayers.length);
for(int i=0;i<currentPlayers.length;i++)
{
graph.drawImage(img, currentPlayers[i].getX(), currentPlayers[i].getY(), this);
}
}
}
}
public void updateScreen()
{
Graphics g = getGraphics();
if(g!=null)
{
if(backBuffer!=null)
{
g.drawImage(backBuffer, 0, 0, null);
} else
{
createBackBuffer();
renderScreen();
}
}
}
private void createBackBuffer()
{
if(backBuffer==null)
{
backBuffer = createImage(getWidth(), getHeight());
} else
{
backBuffer = createImage(getWidth(), getHeight());
}
}
/*
* GETTER & SETTER
*/
public void setPlayers(Player[] players)
{
this.currentPlayers = players;
}
public DataHandler getDataHandler()
{
return this.handler;
}
}
Bei der Console von Eclipse, erkennt man die Zahl 2, welche für aktuelle Spieler steht, jedoch werden immernoch 3 gezeichnet?! Die Zahl 2 kommt vom Server, welche via XML-Daten an den Client schickt.
