2016-04-09 30 views
-1

我正在製作一個2D遊戲,其中玩家的精靈存儲在數組列表中。由於玩家有多種狀態,我想在使用時刪除以前的狀態。我有一個ArrayList爲:從ArrayList中刪除圖像仍然顯示

List<Image> x = new ArrayList(); 

現在我用圖像從這個名單爲:someImageView.setImage(x.getImage(y));

我刪除第一(比如5:0,1,2,3,4,5日圖片)規定爲:

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

但這些圖像仍然顯示,而不是下一個圖像集。

它可能是某種緩存嗎?如果是這樣,我如何刪除這個緩存,以便我的新圖像被應用?

我的子畫面圖像聲明如下(爲一個圖像顯示,但其相似的所有圖像):

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

你叫someImageView.setImage後你休息的圖像將它們從列表中刪除? – MadProgrammer

回答

2

我不知道我是否理解你正確。

因此,您使用例如要在ImageView(設置正確)上設置列表的第一個元素,然後從列表中刪除此元素。

此時你是否期待圖像將從ImageView中刪除?

爲什麼要被刪除?

該列表包含對對象(指針)的引用。當您從列表中設置圖像時,引用被傳遞給ImageView,所以現在它也會指向該對象。如果您從列表中刪除參考,這並不重要,ImageView仍將指向該參考。

所以,你可以打電話setImage明確你刪除的元素之後,或者使用ObservableList並設置上去除圖像(像這樣):

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)); 
     } 
    }); 
} 
相關問題