2016-04-09 4 views
-1

Ich arbeite an einem 2D-Spiel, in dem Sprites für Spieler in Array-Liste gespeichert werden. Da der Spieler mehrere Zustände hat, möchte ich frühere Zustände bei der Verwendung entfernen. Ich habe eine Arraylist als:Entfernte Bilder von ArrayList werden immer noch angezeigt

List<Image> x = new ArrayList(); 

Jetzt habe ich Bilder aus dieser Liste verwenden, wie: someImageView.setImage(x.getImage(y));

Und ich zuerst entfernen (etwa 5: 0,1,2,3,4,5 th Bilder) heißt es zum Beispiel:

for(int i = 0; i < 6; i++) 
    x.remove(y); 

Aber Diese Bilder werden immer noch anstelle des nächsten Bildsatzes angezeigt.

Könnte es sich um eine Art Caching handeln? Wenn ja, wie kann ich diesen Cache löschen, damit meine neuen Bilder angewendet werden?

Erklärung Mein Sprite Bilder ist als (für ein Bild gezeigt, aber seine ähnlich für alle Bilder) folgt:

Image someImg = new Image("path", true, false, true); 
+0

Haben rufen Sie someImageView.setImage und Ruhe die Bilder, nachdem Sie sie aus der Liste entfernt? – MadProgrammer

Antwort

2

Ich weiß nicht, ob ich Sie richtig verstehe.

So verwenden Sie z.B. Das erste Element einer Liste, das auf eine ImageView gesetzt werden soll (es ist richtig eingestellt), dann entfernen Sie dieses Element aus der Liste.

An dieser Stelle erwarten Sie, dass das Bild aus der ImageView auch entfernt wird?

Warum soll entfernt werden?

Die Liste enthält Verweise auf Objekte (Zeiger). Wenn Sie ein Bild aus der Liste setzen, wird die Referenz an ImageView übergeben, sodass es jetzt auch auf dieses Objekt zeigt. Wenn Sie die Referenz aus der Liste entfernen, ist das egal, die ImageView wird immer noch auf diese Referenz verweisen.

So können Sie setImage nennen explizit, nachdem Sie die Elemente entfernt oder eine ObservableList verwenden und das Bild auf remove (so etwas wie dieses) eingestellt:

ObservableList<Image> iList = FXCollections.observableArrayList(); 
iList.addListener(new ListChangeListener<Image>() 
{ 
    @Override 
    public void onChanged(javafx.collections.ListChangeListener.Change<? extends Image> change) { 
     while(change.next()) 
     { 
      if(change.wasRemoved()) 
       imgView.setImage(iList.get(0)); 
     } 
    }); 
} 
Verwandte Themen