2016-04-09 8 views
-1

私はプレイヤーのスプライトが配列リストに格納されている2Dゲームに取り組んでいます。プレーヤーは複数の状態を持っているので、私は使用時に以前の状態を削除したい。ArrayListから削除された画像はまだ表示されています

List<Image> x = new ArrayList(); 

は、今私は、このリストからの画像を使用します:someImageView.setImage(x.getImage(y));

そして、私は最初の削除(5発言:0,1,2,3,4,5番目の画像)私はとしてのArrayListを持っているように述べている:

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

しかし、これらの画像は、次の画像セットの代わりに表示されます。

キャッシングのようなものがありますか?もしそうなら、私の新しいイメージが適用されるようにこのキャッシュをどのように削除できますか?

私のスプライト画像の宣言は、(1枚の画像のために示したが、すべての画像のための類似した)次のとおりです。

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)); 
     } 
    }); 
} 
関連する問題