我需要在我的OpenGL遊戲中將我的精靈移動到每像素路徑(List<Point>
軌道)像素,所以我需要實現一種控制時間的方法。我讀了不同的方法:使用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();
}
}
}
我看不到我的精靈正在移動。一切都被阻塞,直到最後一次迭代,然後我看到我的精靈在軌道的最後一個像素......瞬間!
「OnRenderUpdate」是你應該使用的。 – asawyer 2012-07-31 13:00:33
如果我強迫我的遊戲以30 fps運行,我無法做出比1/fps更快的移動。 – 2012-07-31 13:06:46
這沒有任何意義。 – asawyer 2012-07-31 13:07:42