Почему использование класса ввода c ++, когда я пытаюсь симулировать движение мыши в игре, приводит к filck-move в землю (в игре c)? - PullRequest
0 голосов
/ 08 апреля 2020

Я хотел создать «бота», который бы играл в простые 3D-игры. Я начал с Minecraft. Независимо от того, на сколько увеличено / уменьшено значение x или y, это вызывает ужасное движение флик с последующим вращением, когда я использовал петли) в землю и ничего более (я пытался удалить флаг MOUSEEVENTF_ABSOLUTE). Я знаю, что игра центрирует курсор в центре экрана, а затем считывает разницу при его перемещении и снова центрирует курсор. Я хочу знать, что не так с этим методом или как это сделать правильно, спасибо.

int main(){
    Sleep(3000);

    POINT point = showCoords();
    MouseMove(point.x + 0.1, point.y);
    Sleep(20);                                                                                      
    }

POINT getCords() {

    POINT point;

    if (GetCursorPos(&point))
        std::cout << point.x << "," << point.y << "\n";

    return point;                                                                                       
}

void MouseMove(int x, int y){
    double fScreenWidth = ::GetSystemMetrics(SM_CXSCREEN) - 1;
    double fScreenHeight = ::GetSystemMetrics(SM_CYSCREEN) - 1;
    double fx = x * (65535.0f / fScreenWidth);
    double fy = y * (65535.0f / fScreenHeight);
    INPUT Input = { 0 };
    Input.type = INPUT_MOUSE;
    Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
    Input.mi.dx = fx;
    Input.mi.dy = fy;
    ::SendInput(1, &Input, sizeof(INPUT));                                                          
}
...