我正在使用javafx進行一個小遊戲(炸彈人)。基本上,我有可以種植炸彈的球員。炸彈持續時間(例如爆炸前1500毫秒)。因此,當我的玩家種植一顆炸彈時,我使用Thread.sleep(ms)啓動了一個炸彈中的線程,並在我通知玩家炸彈爆炸後立即啓動。線程執行期間的對象狀態修改
事情是,我的球員能放下了身上的炸彈再往前......但是,當炸彈爆炸,它與座標通知玩家的情況時,炸彈被種植...
例如,如果我的球員在[2; 2],種植一顆炸彈,然後移動到[2; 4],然後炸彈爆炸,我的球員回到[2; 2] ...
任何人都知道我怎麼能實現我的炸彈指向的玩家實例......?
下面是一個代碼示例:
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();
}
}
通知是對象類中的最終本地方法,您不能在您的類中聲明... – AdamSkywalker
關於您的問題 - 您可以聲明刷新爲同步,這將修復您的可見性問題 – AdamSkywalker
實際上,該方法不是所謂的「通知」,我只是簡化了它。使用synchronized不會改變任何不幸的事情。 – IronRabbit