私はOpenGLでパーティクルシステムを作っています。私はLinuxで働いています。私はそれをよりインタラクティブにしたいので、例えば、ユーザーがスペースバーを押すと、新しい花火が飛び出します。
私はキーボード入力をキャプチャするためにGLUTを使用しています。ユーザーがスペースバーを押すと、花火が鳴り出し、しばらくループするループに入り、再びスペースバーを押すと、キーの押下が登録される前に、そのループが実行されます。
だから私の質問はこれです:
は私がするための方法は、供給過剰がでキー入力を格納するバッファをチェックするために、ループの開始時に、ありますか?キーが押されたことを記憶する何らかのバッファがなければならないように思えます。上のループが実行終了すると、キー押下が登録されるためです。
はSOLUTION:私は実際に、私がメインで
ような何かが(私の花火の位置を更新するための配列などをループする以外)今どこでも任意のループをしない
、これを追加します:
あなたの更新glutTimerFuncためのパラメータで関数(ので、このようなものでその後int main(int argc, char** argv){
//Usual glut initializations
glutTimerFunc(30, update, -1);//says in 30miliseconds call update
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
:
void update(int k){
//UPDATE POSITION OF FIREWORKS
glutTimerFunc(30, update, -1);//it is important to add this
glutPostRedisplay();//calls display() on the next iteration of glut's main loop
}
そして、最終的にあなたの表示機能では、あなたが一つのフレームを描画するために行う必要があり、これまで何を(各花火を通じて、私の場合にはループをし、それを描く!)
・ホープ、このことができます:)
興味深い。だから私がスペースバーを押すと、私のバッファに新しい花火を追加してから、私はそれらをループして描くべきです。しかし、私は同じ場所にいるのではないですか?表示されているループが実行されている間に、スペースバーを押すと、直ちに(または近くに)新しい花火が鳴らないでしょうか?表示がループの処理を終了するのを待たなければならないでしょうか? – user979344
@ user979344:表示は*ループしてはいけません。ディスプレイは* 1つのフレーム*を描画して終了する必要があります。複数のフレームを描画する必要がある場合は、GLUTに再度ディスプレイループを呼び出させる必要があります。 –
そして私はあなたが上記のようなタイマーでこれを行うのですか?そこには何も入っていないのですか?あなたはどういう意味ですか?そしてどこから私はディスプレイを呼び出しますか?どのようにしても、私の花火(約200フレーム、ループの200回の反復)を描くためにはループが必要になるでしょう。その間、どんなキーを押しても気にならないでしょう。 – user979344