【问题标题】:Xbox Controller Thumb InputXbox 控制器拇指输入
【发布时间】:2016-04-24 20:43:44
【问题描述】:

我正在使用 Xbox 控制器上的摇杆在屏幕上移动一个小矩形。我有它非常适合鼠标输入,但我似乎遇到了控制器问题。方块出现在屏幕上 (0,0) 控制器的死区。当我移动拇指杆时,方块移动特定的量并且不再移动,当我将手指从摇杆上抬起时,它会回到(0,0)。代码如下,它的代码非常简单,但不能让它工作。感谢您的帮助。

这是第一部分。

void Graphics::rectangle(int x, int y)
{

    {
    r1.x1 = x;
    r1.y1 = y;
    r1.x2 = r1.x1 + 50;
    r1.y2 = r1.y1 + 50;
    }
}

这是第二部分。

LONG x = input->getGamepadThumbRX(0);
LONG y = input->getGamepadThumbRY(0);

float x1 = x/32767;
float y1 = y/32767;

if(x1 > 0 && x1 < 0.2f || x1 < 0 && x1 > -0.2f){
    x1 = 0;
}
if(y1 > 0 && y1 < 0.2f || y1 < 0 && y1 > -0.2f){
    y1 = 0;
}

float factor = 10;
int dx = int(factor * x1);
int dy = int(factor * y1);


graphics->rectangle(dx,dy);

【问题讨论】:

    标签: c++ input xbox


    【解决方案1】:

    我终于找到了解决这个问题的方法。我添加了变量 xNew 和 yNew,它们采用 x 和 y 的值并将它们添加到现有值中。这让我可以在屏幕上移动方块。 xNew 和 yNew 在类的顶部初始化,下面是控制器输入的代码和矩形中的结果。

    `

    void Graphics::rectangle(int x, int y)
    {
        xNew += x;
        yNew += -y;
    
    
        {
            r1.x1 = xNew;
            r1.y1 = yNew;
            r1.x2 = r1.x1 + 50;
            r1.y2 = r1.y1 + 50;
        }
    }
    
     void Game::update()
    {   
        LONG x = input->getGamepadThumbRX(0);
            LONG y = input->getGamepadThumbRY(0);
    
            float x1 = x/32767;
            float y1 = y/32767;
    
            float factor = 10;
            int dx = int(factor * x1);
            int dy = int(factor * y1);
    
    
            graphics->rectangle(dx,dy);
    }`
    

    【讨论】:

    • 再等两天
    【解决方案2】:

    问题是鼠标是"Relative Movement" Input and the thumb-stick is a "Absolute Movement" input。您需要做的是,当您使用拇指棒时,您的最后一行需要类似于

    graphics->rectangle(xOld + dx, yOld + dy);
    

    其中xOldyOld 是您应用该函数之前正方形的位置。

    【讨论】:

    • 我有点明白你的意思,但是你能不能用上面的代码举例,因为我很难想象这个。抱歉,我没怎么用过 C++;
    • 对不起,我真的是一个 C# 人,我不知道你需要做什么。
    • 其实我想我现在知道问题所在了,感谢您的帮助,如果我找到解决方案,我会再次提出来。
    【解决方案3】:

    可能有点晚了,但我确实有一个非常易于使用的 C++ XInput 包装器。看看here

    实际上只需要几行代码,并且您的应用程序中完全支持 XInput 控制器 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2020-06-17
      • 1970-01-01
      • 2018-12-10
      • 2014-05-18
      • 2016-10-02
      相关资源
      最近更新 更多