2017-05-28 14 views
0

解析イベント:Iまた、イベントの種類のスイッチを持っているSFML私は私がSFMLでイベントを処理する方法改善できる方法を知ってwan'tコード

だから私は、関数を呼び出しているのprocessEventsを()各タイプ(mousePressed、mouseReleased、keyPressedなど)のための関数を持っています。私の問題は、それらの関数のサイズです。私もゲームの状態の列挙型クラスを持っているので、各関数にはそれのためのスイッチがあり、私は別のものを行います。その結果、mouseReleased 341行です。

私は、関数のサイズを小さくするためにイベントをよりよく解析する方法を知りたいと思います。

+0

複数の小さな関数に分割しますか? –

+0

[Thorのアクション](http://www.bromeon.ch/libraries/thor/tutorials/v2.0/actions.html)を参照してください –

+0

ありがとう、それは面白そうです – sleiphir

答えて

0

std::vector<bool> downがあり、キーコードまたはマウスボタンのインデックスに使用できます(キーボードの場合は1つ、マウスの場合は1つのベクトル)。次に、押されたイベントが受信されると、down[event.key.code] = trueとなり、リリースされたイベントが受信されると、falseに設定されます。

+0

'std :: map'を使うと、使用されていなくても、すべての値をマップする必要はありません。 – Mario

+0

@Mario 'std :: unordered_map'はそれより優れていますが、同時に押されたキーの量が常に低くなっていることを考慮すると、(キーボードを叩いても、おそらく<30)、単純な' 'std :: vectorリニアルックアップの 'が優れています。 – Aidiakapi

+0

いいえ、std :: mapのアクセスが遅いです。そしてstd :: vector はテンプレートの特殊化です。それぞれのブール値はメモリ内のビットだけで済むので、大丈夫です:) –

0

効果的に処理コードを分散する必要があります。いくつかの 'sfml event-dispatcher'オブジェクトで、イベントのハンドラを登録するためのさまざまなコンポーネントを有効にします。このオブジェクトの唯一の仕事は、ハンドラが正確に何をしているのかを知らなくても、イベントが到着したときに対応するハンドラ(std :: functionを使って表現できる)を呼び出すことです。

+0

ありがとう、私はstd :: functionの仕組みがわかりませんが、私は学ぶことができます:) – sleiphir

関連する問題