Visual c++ 将鼠标输入转换为gamepad stick

Visual c++ 将鼠标输入转换为gamepad stick,visual-c++,input,mouse,gamepad,Visual C++,Input,Mouse,Gamepad,我试图通过转换鼠标输入来模拟gamepad拇指棒,但我在使其平滑方面遇到了很多困难,我所能得到的只是短暂的锯齿状运动。有人知道我怎样才能在不造成明显滞后的情况下平稳下来吗?我尝试从PCSX2 lilypad插件中复制一些值,但没有成功 此代码获取当前鼠标位置,从最后一个鼠标位置减去该位置,并计算应应用于指杆的力。施加的力达到指杆的最大值和最小值,分别为32767和-32767 我认为这段代码可能有几个问题-如果我不停地处理它,有时它会认为鼠标没有移动,并将其重置为0重置所有移动,显然睡眠使它有更

我试图通过转换鼠标输入来模拟gamepad拇指棒,但我在使其平滑方面遇到了很多困难,我所能得到的只是短暂的锯齿状运动。有人知道我怎样才能在不造成明显滞后的情况下平稳下来吗?我尝试从PCSX2 lilypad插件中复制一些值,但没有成功

此代码获取当前鼠标位置,从最后一个鼠标位置减去该位置,并计算应应用于指杆的力。施加的力达到指杆的最大值和最小值,分别为32767和-32767

我认为这段代码可能有几个问题-如果我不停地处理它,有时它会认为鼠标没有移动,并将其重置为0重置所有移动,显然睡眠使它有更多的时间阅读鼠标移动会导致延迟,这在这里不是一个真正的选项。我需要的是一种在不重置运动或增加输入滞后的情况下计算平滑施力量的方法

POINT cursorPos{ 0, 0 };
POINT cursorPos2{ 0, 0 };
GetCursorPos(&cursorPos);
cursorPos2 = cursorPos;

while(true){
    GetCursorPos(&cursorPos);
    int dx = cursorPos.x - cursorPos2.x;
    int dy = cursorPos.y - cursorPos2.y;

    if (dx != 0)
    {
        unsigned short rightX = axisInput.RightX;
        int force = (int)((SENSITIVITY*(255 * (__int64)abs(dx))) + BASE_SENSITIVITY);
        if (dx < 0)
        {
            if ((rightX + force) > 32767)
                rightX = 32767;
            else
                rightX += force;
        }
        else
        {
            if ((rightX - force) < -32767)
                rightX = -32767;
            else
                rightX -= force;
        }
        axisInput.RightX = rightX;
    }
    else
        axisInput.RightX = 0;

    if (dy != 0)
    {
        unsigned short rightY = axisInput.RightY;
        int force = (int)((SENSITIVITY*(255 * (__int64)abs(dy))) + BASE_SENSITIVITY);
        if (dy < 0)
        {
            if ((rightY - force) < -32767)
                rightY = -32767;
            else
                rightY -= force;
        }
        else
        {
            if ((rightY + force) > 32767)
                rightY = 32767;
            else
                rightY += force;
        }
        axisInput.RightY = rightY;
    }
    else
        axisInput.RightY = 0;
    ...
    cursorPos2 = cursorPos;
}
点游标{0,0};
点游标OS2{0,0};
GetCursorPos(&cursorPos);
cursorPos2=cursorPos;
while(true){
GetCursorPos(&cursorPos);
intdx=cursorPos.x-cursorPos2.x;
int dy=cursorPos.y-cursorPos2.y;
如果(dx!=0)
{
无符号短rightX=axisInput.rightX;
int力=(int)((灵敏度*(255*((int64)abs(dx)))+基础灵敏度);
if(dx<0)
{
如果((右X+力)>32767)
rightX=32767;
其他的
右X+=力;
}
其他的
{
如果((右X-力)<-32767)
右x=-32767;
其他的
rightX-=力;
}
axisInput.RightX=RightX;
}
其他的
axisInput.RightX=0;
如果(dy!=0)
{
无符号短rightY=axisInput.rightY;
int力=(int)((灵敏度*(255*(uuu int64)abs(dy)))+基础灵敏度);
if(dy<0)
{
如果((右侧-力)<-32767)
右=32767;
其他的
右-=力;
}
其他的
{
如果((右+力)>32767)
右Y=32767;
其他的
右+=力;
}
axisInput.RightY=RightY;
}
其他的
axisInput.RightY=0;
...
cursorPos2=cursorPos;
}

谢谢

请描述此代码的处理功能,并更准确地说明您希望实现的与此代码相关的功能。我已经更新了我的问题,并提供了更详细的信息。