私はテトリスのゲームに取り組んでおり、WinAPIウィンドウに描画する必要があります。私はFillRect()関数を使用してボードを描画し、FillRect()を使って画面をクリアする自己定義関数で画面をクリアします。素晴らしいですが、ちらつきが私を殺しています!私は私の力ですべてを試みました。私はWM_PAINTメッセージでウィンドウを再描画しようとしましたが、それは別の問題を引き起こします。以前に行ったボードをペイントしません。私はウィンドウをペイントするのと同じ手順で再度ボードをペイントしようとしましたが、それを行う方法を理解できませんでした。自分で定義した座標を持つRECT構造をペイント関数に渡しましたが、空白の画面。どんな提案も大歓迎です。この質問にもう少し明確化が必要かどうか教えてください。Win32再描画しようとすると、アプリケーションがちらつく。助言がありますか?
答えて
睡眠は()コンソールに固有ではありません。これは、指定された時間だけ現在のスレッドの実行を中断する標準のWindows APIです。
おそらくWindows Timersになっているはずです。実行可能なもう1つの方法は、ゲームのような低レイテンシのアプリケーションでは、イベントループの各繰り返しで時間を測定し、それによってゲームを進めることです。あなたは、システムクロックがインターネット網時間から調整されます場合はジャンプして、通常のシステムの壁時計時間として、このためHigh Resolution Time Stampsを使用する必要があります。また、壁時計の時間にはかなりのジッタがあります。ブロックしばらくの間、現在のスレッド -
感謝。これは私のwin32アプリを初めて使っているので、Timersを調べなければなりません。私とぶつかるもう一つの問題は、クリアスクリーンです。私は行って、ウィンドウの幅と高さの白い矩形を描画するFillRect()を使用して、私自身の描画の関数を作成しましたが、ゲームがプレイできない点まで多く点滅します。それについての提案も参考になり、複雑なものには行かないでください。 –
@UzairRiaz:Windows用のゲームを書くときに注意すべき重要な2つのことがあります。グラフィックスが重く、アニメーションがたくさんある場合:GDIを使用しないでください!ゲームを書くのは遅く、扱いにくいです。代わりにDirectXまたはOpenGLを使用してください。もう一つの重要な点は、ちょうどそのちらつきの問題を避けるために、(GDI、DXまたはGLを使用するかどうかにかかわらず)バックグラウンドブラシセットなしでウィンドウを作成する必要があるということです。 - *もちろん行うための最善のことは、直接のWin32 APIを使用していないことでしょうし、代わりにSDLまたはSFMLのようなゲームアプリケーションフレームワークに依存している* – datenwolf
任意の提案私は背景ブラシセットせずにウィンドウを作成することができます方法として。?私はウィンドウのhbrBackgroundプロパティを調整しようとしましたが、何をすべきかを正確に把握することはできませんでした。 –
- 1. 再描画時に特定のオブジェクトがちらつく
- 2. アプリケーションがフリーズすると、画面にはステータスバーのみが表示されます。助言がありますか?
- 3. MVC3とSQL Azureでうまく動作するレポートソリューションを探しています。助言がありますか?
- 4. カーソルで移動する線を描画する必要がありますが、100msごとにウィンドウ全体を再描画しないようにしたい
- 5. IE7では、画像を変更するとちらつきがあります
- 6. .aspxから送信するとラベルが再描画される
- 7. PhoneGap + jQuery = onclickで奇妙な再描画のちらつき? (不透明にアニメーションを適用するとちらつきが発生します)
- 8. ブラウザでDOM要素を直ちに再描画するようにします
- 9. アプリケーションごとにいくつのCouchDBデータベースがありますか?
- 10. Obj-C、いくつかのテーブルビューがあり、すぐにデータが見つからないと言うコードを追加する必要がありますか?
- 11. Apache 2.2および/またはwin32の下でmod_libpqがうまくいくことはありますか?
- 12. Androidでキャンバスでビットマップを描画するときにちらつく
- 13. Android - OpenGl es min_dといくつかのテクスチャが描画されていて、いくつかありません
- 14. ハンドルマウス描画中にちらつきが発生するJava
- 15. から2 UIとの間にあるpanelgroupを再描画しようとすると:私は何をしようとしている説明する
- 16. 再描画が遅すぎますか?
- 17. オーディオを再生しようとするとファイルが見つかりません
- 18. 私はmysqlデータベースからvarcharイメージをアップロードしようとしていますが、動作していません。助言がありますか?
- 19. キャンバスを使用してテキストを描画しようとすると、画像が黒く表示されます。
- 20. IDEからアプリケーションを起動するときに「<name> .dllがWin32アプリケーションではありません。」
- 21. Firefox 4.0と互換性があるようにアドオンをアップグレードしますが、3.xとの互換性を保ちます。助言?
- 22. フレームを再描画しないとパフォーマンス上の利点はありますか?
- 23. ビューを再描画すると入力がフォーカスを失う
- 24. アプリケーションをテストしようとすると 'emulator.exe'が見つかりません
- 25. DOMに触れると、何も変わらなくてもリフローと再描画がトリガされますか?
- 26. Eclipse RCPアプリケーションのドラッグアンドドロップで画面がちらつく
- 27. Google Maps 3ポリラインのちらつきの再描画
- 28. 1つのビューのみを再描画する方法はありますか?
- 29. 新しいページに移動すると画像がちらつく
- 30. ページを切り替えるときに白い画面がちらつく
は 'Sleep'は、それがここにいて、コンソールアプリで同じことを行います。 – chris
'Sleep()'があなたのアプリケーションでうまくいかないのはなぜですか? GUIスレッドを実行し続けるためにタイマーが必要ですか? –
おそらく、ブロックがどこにあるかを制御し、ユーザーの入力を受け入れるために、ビジネスロジックに対して描画するコードを分離する必要がありますか? (別のスレッド)その提案を –