javafx kullanarak küçük bir oyun (bomberman) üzerinde çalışıyorum. Temel olarak, bomba atabilecek oyuncularım var. Bombanın bir süresi vardır (örneğin, patlamadan 1500ms).İş parçacığı yürütme sırasında nesne durum değişikliği
Oyuncum bir bomba attığında, bir Thread.sleep (ms) kullanarak, bombada bir iş parçacığı başlatıyorum ve oyuncunun bombayı patlattığını bildirdikten hemen sonra.
Şey benim oyuncu bomba sonra hareket bırakabilirsiniz olduğunu ... Ama bomba patlar, bu koordinat ile oyuncunun örneğini bildirmek zaman bomba eğer Örneğin
... dikilmiş iken benim oyuncum [2; 2], bir bomba atıyor, sonra [2; 4] 'e geçiyor, bomba patlıyor, oyuncum [2; 2]' ye geri dönüyor ...
Herkes nasıl olabilir? bombamın işaret ettiği oyuncunun örneğini hayata geçirelim ...? Sorunuza olarak
public class Player{
public void putBomb(){
listBomb.add(new Bomb(this));
}
public void refresh(){
System.out.println(xCoordinate+" "+yCoordinate);
}
}
public class Bomb{
public Bomb(Player p){
observer=p;
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1500);
notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
public void sendNotification(){
observer.refresh();
}
}
notify Nesne sınıfında son yerel bir yöntemdir, bunu sınıfınızda bildiremezsiniz ... – AdamSkywalker
sorgunuz hakkında - senkronize edilmiş olarak yenileme bildirebilir, bu sizin görünürlük sorunları giderir – AdamSkywalker
Aslında yöntem değil "bildir" denir, sadece basitleştirdim. Senkronize kullanımı, herhangi bir şeyi talihsiz bir şekilde değiştirmez. – IronRabbit