我需要List<Point>
在我的 OpenGL 游戏中按每个像素的路径(轨道)像素移动我的精灵,所以我需要实现一种控制时间的方法。我读到了不同的方法:使用OnRenderUpdate
(但我不能比 1/fps 更快)、使用不同的线程来控制时间或使用 a StopWatch
(而不是 a 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();
}
}
}
我看不到我的精灵在移动。直到最后一次迭代,一切都被阻止了,然后我在轨道的最后一个像素上看到了我的精灵……传送!