XNA - 尝试使用 IF 检测同时按下 2 个游戏手柄但无济于事

XNA - trying to use an IF to detect 2 gamepad presses at same time with no avail

基本上我在大学有一个任务,我必须在按下时在屏幕上显示 xbox 控制器的游戏手柄按钮按下。

我有代表游戏手柄按压和所有坐标的图像。我可以让按钮在按下时出现......但是。我必须在 dPad 上按对角线才能出现,而没有相应的按钮需要按 "NOT" 出现。我还需要让触发器随着透明度逐渐淡入,因为它们被慢慢推到最大值。

像这样:Image of how the program should look when keys are pressed

我遇到了问题,当我同时按向上和向右时...所有三个图像都在屏幕上亮起(而不是仅对角 up/right 图像)。

我基本上在我的绘图方法中设置了 IF 语句,以便在按下特定图像时绘制特定图像,并用不同的颜色为每个图像着色,如下所示:

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();

我的问题是我不知道如何组合两个 IF 语句来只显示一个对角线图像,你能同时组合两个 IF 语句或游戏机吗?......你如何获得颜色和透明度缓慢增加的触发器...谁能帮我解决这个问题?

您可以使用 && for AND 和 || 在 If 语句中传递多个条件对于或。

在这种情况下,为了清楚起见,我会使用 else if 而不是 multiple if。 只是您代码中的一个示例片段:

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

仅当同时按下向上和向左键时,条件才会通过。

希望这能让您朝着正确的方向前进。