Hallo,
ich versuche gerade ein 2D-Spiel von mir netzwerkfähig zu machen.
Auf dem Bildschirm befinden sich Sprites, die an die Clients versendet werden sollen. Ich nutze noch das einfache Client-Server Prinzip, bei dem der Server alles berechnet und der Computer nur als Terminal dient.
Mein Plan: Ich versende für jeden Sprite die x- und y-Koordinate, sowie einen int, der mit Hife eines Enums einem genauen Bild zugeordnet ist.
Jedoch bekomme ich die verschiedensten Exception, egal was ich probiere. Es klappte weder mit einem int-Array, noch einer Klasse, die in Variablen die Werte speicherten und sogar mit einer gänzlich leeren Klasse klappte es nicht.
Empfangen:
Senden:
ich versuche gerade ein 2D-Spiel von mir netzwerkfähig zu machen.
Auf dem Bildschirm befinden sich Sprites, die an die Clients versendet werden sollen. Ich nutze noch das einfache Client-Server Prinzip, bei dem der Server alles berechnet und der Computer nur als Terminal dient.
Mein Plan: Ich versende für jeden Sprite die x- und y-Koordinate, sowie einen int, der mit Hife eines Enums einem genauen Bild zugeordnet ist.
Jedoch bekomme ich die verschiedensten Exception, egal was ich probiere. Es klappte weder mit einem int-Array, noch einer Klasse, die in Variablen die Werte speicherten und sogar mit einer gänzlich leeren Klasse klappte es nicht.
Empfangen:
Java:
public void listen() {
Object object = null;
try {
object = inputStream.readObject();
} catch(SocketException e) {if(e.getLocalizedMessage().equals("Connection reset")) main.getCommunicationManager().closeConnection();}
catch (IOException e) {e.printStackTrace();}
catch (ClassNotFoundException e) {e.printStackTrace();}
if(object != null) main.print("Objekt erhalten: " + object);
if(object instanceof InputMessage) {
switch((InputMessage) object) {
case PLAYER_MOVE_CENTER: main.getGameManager().setPlayerDirection(1, Direction.CENTER);
case PLAYER_MOVE_RIGHT: main.getGameManager().setPlayerDirection(1, Direction.RIGHT);
case PLAYER_MOVE_LEFT: main.getGameManager().setPlayerDirection(1, Direction.LEFT);
case PLAYER_SHOOT: main.getGameManager().shootArrow(1);
}
}else
if(object instanceof int[][]) main.getDrawManager().setSpriteMessage((int[][]) object);
Java:
public void sendObject(Object object) {
main.print("Sende " + object);
try {
outputStream.writeObject(object);
main.print("Übertragung erfolgreich.");
} catch (IOException e) {e.printStackTrace();}
}
public void sendSpriteList(CopyOnWriteArrayList<Sprite> spriteList) {
sendObject(createMessageArray(spriteList));
}
/* Aufbau einer Netzwerknachricht(Speichert alle Sprites ab)
* Der erste Index gibt den Sprite an
* Der zweite Index ist an Position 0 der Bildtyp, an 1 die X-Position und an 2 die Y-Posiion
*/
private int[][] createMessageArray(CopyOnWriteArrayList<Sprite> spriteList) {
int[][] message = new int[spriteList.size()][3];
for(int x = 0; x < spriteList.size(); x++) {
Sprite sprite = spriteList.get(x);
message[x][0] = main.getImageHandler().getImageNumberFromImage(sprite.getImage()).getNumber();
message[x][1] = (int) Math.round(sprite.getX());
message[x][2] = (int) Math.round(sprite.getY());
}
return message;
}