私のコードは、画像を描画する前にシステム時間を使って遅延を作成します。 drawメソッドは、メインループで繰り返し呼び出されます。ここで奇妙である何のコードJava System.currentTimeMillis()は、デバッグ時に異なる動作を示します。ほぼ2スリットの実験のように
private long delayToStartDraw = 1000;
private long callToStartDrawingInitialTime = 0;
public void draw(SpriteBatch batch) {
if (button != null && !shouldHide) {
boolean shouldDraw = System.currentTimeMillis() - delayToStartDraw > callToStartDrawingInitialTime;
if(shouldDraw){
button.draw(batch);
}
}
}
は、私は、「ブールshouldDraw = ...」にブレークポイントを置けば、それはtrueを返し、私のイメージするたびに描画します、ということです。しかし、if(shouldDraw){"行にブレークポイントを置くと、毎回falseを返します。
矛盾があります。私のブール値の評価を見ると、常に真を返します。私がデバッガで評価するのを見ていないとき(通常の状況です)にはfalseを返します。
私はおそらく、呼び出しがキャッシュされているなどの結果を推測しています。javaは評価のショートカットを取り、初期値(false)を仮定しています。何が起こっているか考えてみませんか?
'shouldDraw'が宣言されている行にブレークポイントを置くと、実行を続行するまで待ってからブレークポイントを置くと、ブール値が' true'になります。 'shouldDraw'の計算が' false'になるまで時間が過ぎます。 Btw: 'callToStartDrawingInitialTime'の値はどこで設定していますか? – luk2302
callToStartDrawingInitialTimeは繰り返し更新される予定ではありませんでしたが、私は誤って何かを呼び出して更新しました。みんなありがとう。 –