我一直在这个短短的一段时间里对我的头脑发疯,而且我真的很困惑。最近,我一直在做一个游戏,现在我正在尝试重做我最初创建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循环忽略某些行,除非它在某些条件下”*我保证你的代码不是“忽略某些行”。不要说你的问题不好,只要确保你创建了一个有效的假设。 –