我剛開始學習.NET所以沒準這是一個很大的n00b錯誤:繪製2D圖形到形式似乎是滯後/慢下來我的計劃
我試圖做一個簡單的乒乓遊戲,使用然後再通過系統::繪圖::圖形類將遊戲繪製到窗體上。
我的代碼顯著位是這樣的:
(主遊戲循環):
void updateGame()
{
//Update Game Elements
(Update Paddle And Ball) (Ex. paddle.x += paddleDirection;)
//Draw Game Elements
//Double Buffer Image, Get Graphics
Bitmap dbImage = new Bitmap(800, 600);
Graphics g = Graphics::FromImage(dbImage);
//Draw Background
g.FillRectangle(Brushes::White, 0, 0, 800, 600);
//Draw Paddle & Ball
g.FillRectangle(Brushes::Black, paddle);
g.FillRectangle(Brushes::Red, ball);
//Dispose Graphics
g.Dispose();
//Draw Double Buffer Image To Form
g = form.CreateGraphics();
g.DrawImage(dbImage, 0, 0);
g.Dispose();
//Sleep
Thread.sleep(15);
//Continue Or Exit
if(contineGame())
{
updateGame();
}
else
{
exitGame();
}
}
(表格初始化代碼)
void InitForm()
{
form = new Form();
form.Text = "Pong"
form.Size = new Size(800, 600);
form.FormBorderStyle = FormBorderStyle::Fixed3D;
form.StartLocation = StartLocation::CenterScreen;
Application::Run(form);
}
PS。這不是確切的代碼,我只是從內存中寫出來的,所以這就是錯誤的名字或者錯誤的名字,或者是初始化表單的一些重要的代碼行來自哪裏。
這就是代碼。 我的問題是,遊戲當然不是每15毫秒更新一次(大約60幀/秒),它的運行速度要慢得多,所以我必須做的是每次移動槳/球大量距離以補償它更新速度非常快,而且看起來非常糟糕。簡而言之,繪製圖形的過程會使遊戲速度下降很多。我有一種感覺,它與我的雙緩衝有關,但我無法擺脫這種情況,因爲這會造成一些糟糕的閃爍。我的問題是, 我該如何擺脫這種滯後?
太棒了!我實施了你的戰術,我得到了一個很好的FPS,幾乎沒有任何閃爍!非常感謝! – Aaron