有運行for
循環與延遲不結冰Bukkit的主線程沒有容易方式。在這種情況下,最好的辦法是使用plugin.getServer().getScheduler().runTaskLater()
:
plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable(){
public void run(){
//shoot the gun
}
},1L);//run after 1 tick
但是,如果你用這個,槍只會火一槍。要解決這個問題,你應該繼續運行調度程序:
public static void runTask(){
plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable(){
public void run(){
//shoot the gun
runTask(); //run the task again
}
},1L);//run after 1 tick
}
但是這樣,槍會保持每嘀嗒一聲,並且永不停止。所以,你應該算的時候,它已經跑了號碼,並停止運行任務一旦達到數量:
public static void runTask(final int timesLeft){
plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable(){
public void run(){
//shoot the gun
if(timesLeft > 0){
runTask(timesLeft - 1); //run the task again after removing from the times left
}
}
},1L);//run after 1 tick
}
那麼,到底,你的循環方法可以是這個樣子:
public static void fire(final Player player, final Gun gun, final int timesLeft){
plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable(){
public void run(){
Bullet bullet = new Bullet(player, gun);
GunsV1.bullets.add(bullet);
if(timesLeft > 0){
fire(player, gun, timesLeft - 1); //run the task again after removing from the times left
}
}
},1L);//run after 1 tick
}
,你可以通過調用它:
fire(player, gun, shotsPerBurst);
它解決了這個問題,但我不知道該從哪裏出發,因爲我是這個網站的新手 – Javed 2015-04-09 00:49:21
你應該提供幫助你的答案。另外,如果答案解決了你的問題,你應該接受它(這適用於所有問題)。但無論如何,一旦你接受解決你的問題的答案,你就完成了。 – Jojodmo 2015-04-09 00:55:19