私はこの間私の頭を傷つけていましたが、今はかなり混乱しています。最近、私はゲームを作ってきましたが、私は最初に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
は機能しなくなります(したがって、両方の行は機能しません)。
コメントしたyOffset
のように、xOffset
行をコメントアウトすると、yOffset
は機能しなくなり、コード全体が役に立たなくなります。
ここで最も奇妙な部分です。彼らは私がSystem.out.println()
メソッドを置くと両方とも動作します。 (それらのうちの1つがコメントされており、System.out.println()
が置かれている場合は、コメントを外したものが動作します)。
なぜ特定の条件の下でループが特定の行を無視しているのかわかりません。私がそうすることを考える理由は全くありません。何か案は?
「getLocation()」のような音は一度しか働きません。あなたは "働きを止める"を定義する必要があります。 – John3136
これはほぼ間違いなく[Data Race](https://docs.oracle.com/cd/E19205-01/820-0619/geojs/index.html)です。 – Natecat
デバッグの最も重要な部分の1つは、正しい質問。 https://www.google.com/#q=scientific+method。 * "なぜ特定の条件を満たさない限りwhileループが特定の行を無視しているのかわからない。" *あなたのコードが "特定の行を無視する"という保証はありません。あなたの質問は、あなたが有効な仮説を作成することを確認するだけで悪いことではありません。 –