2011-07-23 13 views
4

私は(無料の)GLUTを使って小さなゲームを作ろうとしています。私はそれが古いと良い選択肢があることを知っているが、現在私はそれに固執し、できるだけそれを使用することを好む。私はCでプログラムします。GLUTが正しく検出されず、2つ以上のキーが押されましたか?

私は現在、私が押したすべてのキーを正しく検出するようにしています。 私はglutKeyboardFunc、glutKeyboardUpFunc、glutSpecialFunc、glutSpecialUpFuncを使用して、押されたキーを検出し、それらの状態を私が作成した短い配列に格納します(私は現在、5つの使用可能なキーしか持っていないので、

しかし、すべてが2つのキー以下で正常に動作している間、ゲームは3つ以上のキーを適切に検出しません。いくつかのキーでは組み合わせが正しく検出されますが(実際には1つの特定の組み合わせに対してのみ発生します)、他の機能では、私が押した3番目のキーを検出しません。

コードを数回確認しましたが、動作する組み合わせについて特別なことは何もありません。 また、glutKeyboardFuncとglutSpecialFuncは、受け取ったすべてのキー押下を直接印刷しました.2つ以上のキーを押した後、単に停止するようです。

GLUTなどの既知の問題ですか?私はたくさんのグーグル・グーグルで似たような問題を持つ人を見つけられませんでした。

+0

他のプログラムで2つ以上のキーを取得しましたか?あなたのキーボードが2キー以上のロールオーバーを処理できることは確かですか? –

答えて

4

私は知っているとおりGLUTにはあまり慣れていませんが、キーボードは2つ以上の入力キーを同時にサポートしていることを確認してください。この機能はn-key rolloverと呼ばれます。 Thisページでは、2キーのロールオーバが一部のキーボードの共通の値である可能性がありますが、このソースを信頼する必要はありません。

+0

あなたが正しいと思われます。キーボードが3つのキーを認識できないとは思えませんでしたが、いくつかのテストを行いましたが、実際には2つの方向キーとスペースバーの組み合わせは検出できません。私は単にスペースバーのキーを何かに変更して、すべてが完全に機能しました。助けてくれてありがとう! – Alex

1

ポイントを明確にします:glutKeyBoardFuncはコールバックです。つまり、繰り返し押されて実行されたすべてのキーに対して呼び出され、さまざまなキーの組み合わせについてのすべてのif-else(またはswitch-case)実行される。つまり、キー・プレス・イベントが最初に受信されたことに応じて、 'A'、 ' - >'(右矢印)および 'D'を一度に押すと、それに応じてコールバックが実行されます。場合によっては遅れを伴い、オンスクリーンアニメーションが一時的に停止することがあります。

GLUTは純粋に教育的/学習目的のためのものですが、それはそれが設計されたものではないため、完全なアプリケーションには適していません。 OpenGLの「ウィンドウ」を埋め込み、キーボードイベントなどを実行するために、OS固有のライブラリや他の言語(Qtなど)を使用して立ち上げます。これらの(および/またはOS固有のフレームワークでの)イベント処理は根本的に異なります)がGLUTよりも優れています。

キーの同時押下を最小限に抑えたい場合があります。あなたはマウスでそれを増強して、敏感な反応/処理を取り除くことができます...

+0

私はそれを知っていますが、実際の大きなプロジェクトに取り組んでいるわけではないので、私はまだそれを使用することを好みますが、学習目的のために小さなゲームを作成しようとしています。私はおそらく、私の現在の小さなシュート・イン・アップ・サイド・スクローラーを終了した後、SDLに移動するでしょう。 – Alex

関連する問題