hallö,
ich bin gerade dabei ein Multiplayer-Browsergame zu "basteln", als Backend verwende ich hierzu einen Java basierten Server.
Zur "Collision Detection" bennutze ich (bzw möchte ich benutzen) ein 3 Dimensionales Array das so initiert wird:
Da ich die Detection für viele User und einige Positionen festlegen möchte und je User bis zu 10 mal (tickTime des Servers beträgt ~100ms) pro sekunde durchlaufen werden kann, habe ich wie evtl zu erahnen ist bounding gebildet.. also fasse 16*16 Positionen zusammen und möchte dann in der "dritten Dimension" der ArrayList die UserID ablegen... was dan ungefähr so aussieht:
Fehlermeldungen erhalte ich keine, jedoch sieht mein Consolen Output so aus:
Nun zu den Preisfragen
1) es ist vorhanden, warum ist es leer, oder liegt es daran das userID(der gespeicherte Wert) eine long ist und somit nicht als String ausgegeben wird?
2) Würde das dann auch erklären warum der App die bearbeitung der Methode Abbricht alsobald ich
System.out.println("##################" +(String) ((ArrayList)((ArrayList)mapContainer.get(userX)).get(userY)).get(0));
das Ergebniss auf String zu Casten?
Noch eine Frage, eine 3D Arraylist , ist (in meinen Augen) nicht wirklich schön aber bisher das performanteste was mir eingefallen ist, gibt es da eine besser Möglichkeit und wenn ja wie sehen diese aus.
Ja eine Datenbank steht natürlich auch irgendwo rum nur denke ich das bei 20 anfragen pro user/sekunde dein ständiges abgleichen mit der DB nicht wirklich Performanter sein kann, soll ja schonmal vorgekommen sein das mehr als 1000 User auf dem gleichen Gameserver sind.
ich bin gerade dabei ein Multiplayer-Browsergame zu "basteln", als Backend verwende ich hierzu einen Java basierten Server.
Zur "Collision Detection" bennutze ich (bzw möchte ich benutzen) ein 3 Dimensionales Array das so initiert wird:
Code:
public void initMapContainer(int initMapSize_X, int initMapSize_Y){
int i;
int j;
for(i = 0 ; i < initMapSize_X ;i++){
mapContainer.add(new ArrayList());//x
for(j = 0; j < initMapSize_Y; j++){
((ArrayList)mapContainer.get(i)).add(new ArrayList());// y
((ArrayList)((ArrayList)mapContainer.get(i)).get(j)).add(new ArrayList());//arraylist for userID
}
}
}
Da ich die Detection für viele User und einige Positionen festlegen möchte und je User bis zu 10 mal (tickTime des Servers beträgt ~100ms) pro sekunde durchlaufen werden kann, habe ich wie evtl zu erahnen ist bounding gebildet.. also fasse 16*16 Positionen zusammen und möchte dann in der "dritten Dimension" der ArrayList die UserID ablegen... was dan ungefähr so aussieht:
Code:
private void addMapContainerContent(Positions uP){
System.out.println("########_________##########");
int uPosX = (int)Math.round(uP.getPosX());
int uPosY = (int)Math.round(uP.getPosY());
int userX = internalMapStart_X + (uPosX / internalMapSpriteSize_X);
int userY = internalMapStart_Y + (uPosY / internalMapSpriteSize_Y);
((ArrayList)((ArrayList)mapContainer.get(userX)).get(userY)).add(uP.getUserID());
System.out.println("##################" + ((ArrayList)((ArrayList)mapContainer.get(userX)).get(userY)).get(0));
}
Fehlermeldungen erhalte ich keine, jedoch sieht mein Consolen Output so aus:
########_________##########
##################[]
Nun zu den Preisfragen
1) es ist vorhanden, warum ist es leer, oder liegt es daran das userID(der gespeicherte Wert) eine long ist und somit nicht als String ausgegeben wird?
2) Würde das dann auch erklären warum der App die bearbeitung der Methode Abbricht alsobald ich
System.out.println("##################" +(String) ((ArrayList)((ArrayList)mapContainer.get(userX)).get(userY)).get(0));
das Ergebniss auf String zu Casten?
Noch eine Frage, eine 3D Arraylist , ist (in meinen Augen) nicht wirklich schön aber bisher das performanteste was mir eingefallen ist, gibt es da eine besser Möglichkeit und wenn ja wie sehen diese aus.
Ja eine Datenbank steht natürlich auch irgendwo rum nur denke ich das bei 20 anfragen pro user/sekunde dein ständiges abgleichen mit der DB nicht wirklich Performanter sein kann, soll ja schonmal vorgekommen sein das mehr als 1000 User auf dem gleichen Gameserver sind.