Buonasera, sto lavorando ad un progetto in java, che consiste nella realizzazione di un gioco. il gioco consiste nel colpire un oggetto carro con un'altro oggetto bomba, e ritardare la rimozione dell'oggetto carro dall' array list. Il problema che mi si è posto a cui non sono riuscito a trovare una soluzione è questo, durante il gioco mi si presenta tale errore:
Exception in thread "Thread-10" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at wargame.LOGIC.GameController.collisioni(GameController.java:55)
at wargame.GUI.GamePanel$GameThread.run(GamePanel.java:226)
at java.lang.Thread.run(Thread.java:745)
da come ho capito è un'errore di overflow dell'array, cioè io non ho oggetti all'interno dell'array, ma accedo ad un area di memoria che di per se non contiene nulla, giusto?
il codice della collisione tra i due oggetti è il seguente:
public void collisioni(GeneratoreBombe pBombe, CamionGenerator pCamion) {
long valoreInit = 0;
long valoreFinal;
if (blocco) {
for (int i = 0; i < pBombe.getArraySize(); i++) {
for (int j = 0; j < pCamion.getArraySize(); j++) {
if ((i < 0) && (j < 0)) {
//non fa niente
}else{
if (pBombe.getBombe().get(i).isVisible() && pCamion.getArrayCamion().get(j).isVisible()) {
if ((GestoreCollisioni.visualizzaCollisioni(pBombe.getBombe().get(i).getBombaRect(), pCamion.getArrayCamion().get(j).getCamionRect()))) {
blocco = false;
pBombe.getBombe().get(i).setVisible(false);
pBombe.getBombe().get(i).setInvisible(true);
pCamion.getArrayCamion().get(j).setVisible(false);
pCamion.getArrayCamion().get(j).setDestroyed(true);
valoreInit = System.currentTimeMillis();
for (int k = 0; k < pBombe.getArraySize(); k++) {
if (pBombe.getBombe().get(k).isInvisible()) {
pBombe.removeElement(k);
}
}
do {
valoreFinal = System.currentTimeMillis();
} while (valoreFinal - valoreInit < 20);
blocco = true;
valoreInit = 0;
for (int y = 0; y < pCamion.getArraySize(); y++) {
if (pCamion.getArrayCamion().get(y).isDestroyed()) {
pCamion.removeElement(j);
}
}
countObjectDestroyed++;
}
}
}
}
}
}
}
E' un poco strano come codice, ma ho preferito utilizzare una specie di lock, invece che un thread, il quale ogni volta mi ritardava la rimozione dell'oggetto carro.
Spero che il codice si comprensibile, chiedo aiuto, perchè non so più dove sbattere la testa.
Grazie in anticipo