2016-05-21 4 views
-1

私はテトリスのゲームに取り組んでおり、WinAPIウィンドウに描画する必要があります。私はFillRect()関数を使用してボードを描画し、FillRect()を使って画面をクリアする自己定義関数で画面をクリアします。素晴らしいですが、ちらつきが私を殺しています!私は私の力ですべてを試みました。私はWM_PAINTメッセージでウィンドウを再描画しようとしましたが、それは別の問題を引き起こします。以前に行ったボードをペイントしません。私はウィンドウをペイントするのと同じ手順で再度ボードをペイントしようとしましたが、それを行う方法を理解できませんでした。自分で定義した座標を持つRECT構造をペイント関数に渡しましたが、空白の画面。どんな提案も大歓迎です。この質問にもう少し明確化が必要かどうか教えてください。Win32再描画しようとすると、アプリケーションがちらつく。助言がありますか?

+0

は 'Sleep'は、それがここにいて、コンソールアプリで同じことを行います。 – chris

+0

'Sleep()'があなたのアプリケーションでうまくいかないのはなぜですか? GUIスレッドを実行し続けるためにタイマーが必要ですか? –

+0

おそらく、ブロックがどこにあるかを制御し、ユーザーの入力を受け入れるために、ビジネスロジックに対して描画するコードを分離する必要がありますか? (別のスレッド)その提案を –

答えて

1

睡眠は()コンソールに固有ではありません。これは、指定された時間だけ現在のスレッドの実行を中断する標準のWindows APIです。

おそらくWindows Timersになっているはずです。実行可能なもう1つの方法は、ゲームのような低レイテンシのアプリケーションでは、イベントループの各繰り返しで時間を測定し、それによってゲームを進めることです。あなたは、システムクロックがインターネット網時間から調整されます場合はジャンプして、通常のシステムの壁時計時間として、このためHigh Resolution Time Stampsを使用する必要があります。また、壁時計の時間にはかなりのジッタがあります。ブロックしばらくの間、現在のスレッド -

+0

感謝。これは私のwin32アプリを初めて使っているので、Timersを調べなければなりません。私とぶつかるもう一つの問題は、クリアスクリーンです。私は行って、ウィンドウの幅と高さの白い矩形を描画するFillRect()を使用して、私自身の描画の関数を作成しましたが、ゲームがプレイできない点まで多く点滅します。それについての提案も参考になり、複雑なものには行かないでください。 –

+0

@UzairRiaz:Windows用のゲームを書くときに注意すべき重要な2つのことがあります。グラフィックスが重く、アニメーションがたくさんある場合:GDIを使用しないでください!ゲームを書くのは遅く、扱いにくいです。代わりにDirectXまたはOpenGLを使用してください。もう一つの重要な点は、ちょうどそのちらつきの問題を避けるために、(GDI、DXまたはGLを使用するかどうかにかかわらず)バックグラウンドブラシセットなしでウィンドウを作成する必要があるということです。 - *もちろん行うための最善のことは、直接のWin32 APIを使用していないことでしょうし、代わりにSDLまたはSFMLのようなゲームアプリケーションフレームワークに依存している* – datenwolf

+0

任意の提案私は背景ブラシセットせずにウィンドウを作成することができます方法として。?私はウィンドウのhbrBackgroundプロパティを調整しようとしましたが、何をすべきかを正確に把握することはできませんでした。 –

関連する問題