List<Point>
OpenGL ゲームでパス (トラック) ピクセルごとにスプライトを移動する必要があるため、タイミングを制御する方法を実装する必要があります。私はさまざまな方法について読みました: を使用するOnRenderUpdate
(ただし、1/fps よりも速くすることはできません)、別のスレッドを使用して時間を制御する、またはStopWatch
(の代わりにTimer
) を使用する。私は最後のものを試しています:
private void Sprite_Move(Sprite sprite, List<Point> path) {
track.Clear();
for (int i = 1; i < path.Count; i++) {
//memorize all track pixel, so I can update pixel per pixel my sprite position
Bresenham2(path[i-1], path[i]);
}
//moving flag
sprite.moving = true;
//start my StopWatch
timer.Start();
Loop(timer, sprite);
}
private void Loop(Stopwatch timer, Sprite sprite) {
int i = 1;
while (timer.IsRunning) {
//moving each 0.03s?
if ((sprite.moving) & (timer.Elapsed.Milliseconds >= 30)) {
if (i < track.Count) {
//change sprite position to the i-th track pixel
Sprite_Position(skinny, track[i]);
i++;
timer = StopWatch.StartNew();
Console.WriteLine("Tick");
}
//if I'm on the end of the track I can exit
else timer.Stop();
}
}
}
スプライトが動いているのが見えません。最後の反復まですべてがブロックされ、トラックの最後のピクセルにスプライトが表示されます...テレポート!