我一直在這個短短的一段時間裏對我的頭腦發瘋,而且我真的很困惑。最近,我一直在做一個遊戲,現在我正在嘗試重做我最初創建Camera class
的方式。它現在是Thread
的一部分,並且遵循特定的Location
。while循環忽略行嗎?
下面是代碼:
public void run(){
while (game.isRunning()){
if (!lockLocation) continue;
while (center == null){
EntityHandler handler = game.getEntityHandler();
if (handler == null) continue;
center = (Entity) game.getEntityHandler().getFirst(ObjectType.PLAYER);
}
xOffset = center.getLocation().getRawX() - (Game.WIDTH/2) + (center.getWidth()/2);
yOffset = center.getLocation().getRawY() - (Game.HEIGHT/2) + (center.getHeight()/2);
}
try { thread.join(); }
catch (InterruptedException e) { e.printStackTrace(); }
}
所以這段代碼在這裏工作......在一定條件下。 採取以下行注:
xOffset = center.getLocation().getRawX() - (Game.WIDTH/2) + (center.getWidth()/2);
yOffset = center.getLocation().getRawY() - (Game.HEIGHT/2) + (center.getHeight()/2);
當我把線爲,則僅yOffset
作品。當我註釋掉yOffset
行時,xOffset
將停止工作(因此,兩行都不起作用)。
當我註釋掉xOffset
行時,很像註釋yOffset
,yOffset
將不再起作用,呈現整個代碼無用。
這是最古怪的部分;他們都會工作,當我把System.out.println()
方法。 (如果其中一個被評論並且放置了System.out.println()
,那麼未註釋的將會有效)。
我不知道爲什麼while
循環只是忽略某些行,除非它在某些條件下。我完全沒有理由這樣做。有任何想法嗎?
聽起來像'getLocation()'只能工作一次。你需要定義「停止工作」。 – John3136
這幾乎肯定是[數據競賽](https://docs.oracle.com/cd/E19205-01/820-0619/geojs/index.html) – Natecat
可以說,調試的最重要的部分之一就是要求正確的問題。 https://www.google.com/#q=scientific+方法。 *「我不知道爲什麼while循環忽略某些行,除非它在某些條件下」*我保證你的代碼不是「忽略某些行」。不要說你的問題不好,只要確保你創建了一個有效的假設。 –