2016-09-14 10 views
1

基本的に私はプレス時に画面のxboxコントローラからゲームパッドのボタンプレスを表示する必要があります。XNA - IFを使用して、同時に2つのゲームパッドのプレスを検出しようとしています

ゲームパッドのプレスとすべての座標を表す画像があります。しかし、ボタンが押されたときにボタンを表示させることができます。表示するdPadの対角線のプレスを持っていなければなりません。対応するボタンがなければ、 "NOT"を押す必要があります。私はまた、トリガーがゆっくりと最大値にプッシュされるので、トリガーを透明にフェードインさせる必要があります。このような

Image of how the program should look when keys are pressed

私は右一緒に押したとき... 3枚のすべての画像が(代わりにちょうど右/アップ対角線画像の)画面上に点灯するという問題があります。

私の描画メソッド内のステートメントは、それらが押されたときに、特定の画像を描画するために、それらに異なる色でそれぞれを着色する場合、私は基本的にこのように、着手している

spriteBatch.Begin(); 
     spriteBatch.Draw(under, underPos, Color.White); 
     if (GamePad.GetState(PlayerIndex.One).Triggers.Right == 1.0f) 
     { 
      spriteBatch.Draw(rightTrigger, rTriggerPos, Color.White); 
     } 
     if (GamePad.GetState(PlayerIndex.One).Triggers.Left == 1.0f) 
     { 
      spriteBatch.Draw(leftTrigger, lTriggerPos, Color.White); 
     } 
     if (GamePad.GetState(PlayerIndex.One).DPad.Right == ButtonState.Pressed) 
     { 
      spriteBatch.Draw(right, rightPos, Color.Red); 
     } 
     if (GamePad.GetState(PlayerIndex.One).DPad.Left == ButtonState.Pressed) 
     { 
      spriteBatch.Draw(left, leftPos, Color.Blue); 
     } 
     if (GamePad.GetState(PlayerIndex.One).DPad.Up == ButtonState.Pressed) 
     { 
      spriteBatch.Draw(up, upPos, Color.Yellow); 
     } 
     if (GamePad.GetState(PlayerIndex.One).DPad.Down == ButtonState.Pressed) 
     { 
      spriteBatch.Draw(down, downPos, Color.Green); 
     } 
     if (GamePad.GetState(PlayerIndex.One).DPad.Right == ButtonState.Pressed) 
     if (GamePad.GetState(PlayerIndex.One).DPad.Up == ButtonState.Pressed) 
     { 
      spriteBatch.Draw(upRight, upRightPos, Color.Orange); 
     } 
     if (GamePad.GetState(PlayerIndex.One).DPad.Down == ButtonState.Pressed) 
     if (GamePad.GetState(PlayerIndex.One).DPad.Right == ButtonState.Pressed) 
     { 
      spriteBatch.Draw(downRight, dRightPos, Color.Brown); 
     } 
     if (GamePad.GetState(PlayerIndex.One).DPad.Up == ButtonState.Pressed) 
     if (GamePad.GetState(PlayerIndex.One).DPad.Left == ButtonState.Pressed) 
     { 
      spriteBatch.Draw(upLeft, upLeftPos, Color.Cyan); 
     } 
     if (GamePad.GetState(PlayerIndex.One).DPad.Down == ButtonState.Pressed) 
     if (GamePad.GetState(PlayerIndex.One).DPad.Left == ButtonState.Pressed) 
     { 
      spriteBatch.Draw(downLeft, dLeftPos, Color.Purple); 
     } 
     spriteBatch.End(); 

私の問題は、私ドン」です2つのIFステートメントを結合して1つの斜めの画像を表示する方法を知っていますが、2つのIFステートメントまたはゲームのプレスを組み合わせることはできますか...そして、どのようにトリガーを色と透明度が徐々に上昇するのですか?誰もがこれで私を助けることができますか?

+0

'if(rightIsPressed && leftIsPressed) 'を考慮してください。トリガーについては、[Color.Lerp](https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.color.lerp(v = xnagamestudio.31).aspx)を参照してください。 – itsme86

+0

Color.Lerpはとても役に立ちました、ありがとうございました – ESuth

+0

問題ありません。がんばろう! – itsme86

答えて

0

If文に複数の条件を渡すことができます。ANDと||には& &を使用します。 ORのために。

この例ではわかりやすくするために、複数の代わりにelseを使用します。 これを行使あなたのコードからわずかのサンプルスニペット:

else if (GamePad.GetState(PlayerIndex.One).DPad.Up == ButtonState.Pressed && GamePad.GetState(PlayerIndex.One).DPad.Left == ButtonState.Pressed) { spriteBatch.Draw(upLeft, upLeftPos, Color.Cyan); }

UPとLEFTの両方が同時に押された場合にのみ、この条件パスを行います。

これが正しい方向に向いていることを願っています。

+0

私はそれをしました、そしてelse if文も追加しましたが、私は4つのボタンを押しているので、まだ互いに結合していることがあります。私はそれぞれの4つのコンボプレスを隔離する方法を必要としています。右上/右下/下/左&左&上。そのため、各コンボが押されたときに、他の2つのコンボが同時に実行されることはありません。 – ESuth

+0

これには2通りの方法があります。より多くのelse-if文をカプセル化することができますが、しばらくしてから読みにくいためにこれを行うことができます。私は2つのボタンが押されたときのための独自の論理ルールを含むboolメソッドを作ることを提案します。 2つのボタンが押された場合、boolはtrueを返します。これをelse ifの中の条件文として使用し、bool文が真の場合にのみ実行します。 – CodeSurvivor

+0

編集:複数のボタンが色になっている理由は、コードで何かを色づけないと判断するロジックが増えるためです。上記と関連して。 1つのボタンだけが押されているかどうかを判断する各メソッドにそのboolステートメントを追加します。そうでなければ、この "if"文 "else"を実行してください。 – CodeSurvivor

関連する問題