私は.NETの学習を始めたばかりなので、これは大きなn00bの間違いである可能性があります:
フォームと System::Drawing::Graphics クラスを使用してゲームをフォームに描画する、単純なピンポン ゲームを作成しようとしています。
私のコードの重要な部分は次のようになります。
(メイン ゲーム ループ):
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) ごとに更新されていないということです。それははるかに遅くなっているため、更新されていないことを補うためにパドル/ボールを毎回より大きな距離に移動する必要があります。非常に速く、それは非常に悪く見えます。
一言で言えば、グラフィックスの描画に関しては、ゲームの速度が非常に大幅に低下しています。ダブルバッファリングと関係があるような気がしますが、それを取り除くことはできません。私の質問は、どうすればこのラグを取り除くことができますか?