2016-08-10 24 views
0

私は非常にシンプルな2人プレイゲームを作った。その1人はクラゲ、もう1人はSFMLのサメである。唯一の問題は、一度に1つのスプライトしか移動できないことです。これを修正することは可能ですか?どのように修正できますか?C++ SFML - SFMLの2つのキーを同時に押す方法

EDIT:あなたが一つのキーを押すと、キーを離したときにクリアされたときにセットされるフラグを持つことによってそれを解決

if (event.type == sf::Event::KeyPressed) 
      { 
       bool D; 
       bool A; 
       bool S; 
       bool W; 
       bool Up; 
       bool Right; 
       bool Left; 
       bool Down; 
       if (event.key.code == sf::Keyboard::A) 
        A = true; 



       if (event.key.code == sf::Keyboard::D) 
        D = true; 

       if (event.key.code == sf::Keyboard::W) 
        W = true; 

       if (event.key.code == sf::Keyboard::S) 
        S = true; 

       if (event.key.code == sf::Keyboard::Left) 
        Left = true; 

       if (event.key.code == sf::Keyboard::Right) 
        Right = true; 

       if (event.key.code == sf::Keyboard::Up) 
        Up = true; 

       if (event.key.code == sf::Keyboard::Down) 
        Down = true; 

       if (D and Right) 
       { 
        jelly.move(10, 0) 
       } 
        ... 



      } 
+0

もちろん、修正することができます。特定のキーが押されたときに押されたキーと移動するスプライトを追跡するだけで済みます。 –

+0

@JesperJuhlしかし、同時に2つのキーが押されているのをどのように追跡することができますか? –

+0

関連するキーが押されたときに 'true'に設定される' bool'変数と、リリース時に 'false'を使用します。そして、あなたのboolをテストして何をするかをテストします。 –

答えて

2

:私の試みはこれです。次に、他のキーが押されたときにこのフラグをチェックすることができます。

+0

私がしている問題は、1つのキーだけを押すと動かないということです。私はそれが2つを扱い、1つを扱うことができるようにしたい。 –

+0

@JamesBondそれにフラグを使用することもできます。主なレンダリング/イベントループでは、キーのフラグがセットされている(つまり、押されている)場合、オブジェクトを移動させる必要がある場所の位置を更新します。レンダリングの前にこれを行います。 –

0

また、sf::Keyboard::isKeyPressedを使用して、特定のポイントでのキーボードの状態を調べることができます。

あなたの現在のコードに関する1つの問題は、すべての変数がif文のローカルなので、次のイベントを処理するときに再初期化されることです。それらはifの外で定義する必要があります。もう1つの問題は、KeyReleasedイベントを処理しないことです。

+0

イベントを混ぜて直接チェックすると、結果が矛盾することがあるという問題があります。確かに、あなたは*今* "今"のキーを調べることができますが、それは "今すぐ押されていないので、ユーザーは短い時間だけキーを押してから解放しません"。あなたは通常、イベントや即時の結果によって動かされることを選びたいと思っていますが、それらを混ぜると混乱が生じます。 –

+0

@JesperJuhl、したがって '代替';) – Hiura