我已经为此花了很短的时间,我真的很困惑。最近,我一直在做游戏,现在我正尝试重做最初创建Camera class
的方式。现在它是Thread
的一部分,并遵循特定的Location
。
这是代码:
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
循环只忽略某些行,除非在某些情况下。我绝对没有理由为此考虑。有任何想法吗? 最佳答案
是否有另一个线程正在更新xOffset,yOffset或center?
如果两个线程都试图更新这些变量,则可能会看到所描述的行为。您可以尝试在这两行周围添加锁定语句或synchronized
块。该锁将需要与更新这些变量的其他线程共享,并且该线程也将需要锁定声明。
关于java - While循环忽略行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37198822/