Не могу заставить мой объект указывать на мышь - PullRequest
2 голосов
/ 05 мая 2010

Я использую комбинацию SDL и OpenGL в своего рода проекте ускоренного курса, чтобы научить себя, как все это работает. Меня действительно интересует только OpenGL как способ использования ускорения в 2D-играх, поэтому мне просто нужно это для работы в 2D-плоскости.

У меня сегодня было много проблем с моей текущей проблемой, я хотел бы, чтобы объект указывал на мышь, пока нажата кнопка мыши, и затем, конечно, оставался бы направленным в этом направлении после того, как мышь поднята.

void Square::handle_input() {
    //If a key was pressed
    if( event.type == SDL_KEYDOWN ) {
        //Adjust the velocity
        switch( event.key.keysym.sym ) {
            case SDLK_UP: upUp = false; yVel = -1; break;
            case SDLK_DOWN: downUp = false; yVel = 1; break;
            case SDLK_LEFT: leftUp = false; xVel = -1; break;
            case SDLK_RIGHT: rightUp = false; xVel = 1; break;
            case SDLK_w: wUp = false; sAng = 1; break;
            case SDLK_s: sUp = false; sAng = -1; break;
        }
    }
    //If a key was released
    else if( event.type == SDL_KEYUP ) {
        //Adjust the velocity
        switch( event.key.keysym.sym ) {
            case SDLK_UP: upUp = true; yVel = 0; break;
            case SDLK_DOWN: downUp = true; yVel = 0; break;
            case SDLK_LEFT: leftUp = true; xVel = 0; break;
            case SDLK_RIGHT: rightUp = true; xVel = 0; break;
            case SDLK_w: wUp = true; sAng = 0; break;
            case SDLK_s: sUp = true; sAng = 0; break;
        }
    }
    //If a mouse button was pressed
    if( event.type == SDL_MOUSEBUTTONDOWN ) {
        switch ( event.type ) {
            case SDL_MOUSEBUTTONDOWN: mouseUp = false; mousex == event.button.x; mousey == event.button.y; break;
            case SDL_MOUSEBUTTONUP: mouseUp = true; break;
        }
    }
}

И затем это вызывается в конце моего вызова Object :: Move, который также обрабатывает перевод x и y

if (!mouseUp) {
xVect = mousex - x;
yVect = mousey - y;

radAng = atan2 ( mousey - y, mousex - x );
sAng = radAng * 180 / 3.1415926l;
}

Прямо сейчас, когда я нажимаю, объект поворачивается и направлен вниз влево, но больше не меняет направление. Я бы очень признателен за любую помощь, которую я мог получить здесь. Я предполагаю, что здесь может быть проблема с событиями состояния и опроса, но из всех обучающих программ, которые я прошел, я был почти уверен, что исправил это. Я только что врезался в стену, и мне нужен совет!

1 Ответ

3 голосов
/ 05 мая 2010

Я предполагаю, что вы хотите, чтобы объект продолжал указывать на положение мыши, пока кнопка мыши удерживается. Чтобы это исправить, вам придется обновлять положение мыши при каждом перемещении мыши.

Добавьте код, похожий на этот:

if( event.type == SDL_MOUSEMOVE ) {
    // update the mouse position here using event.???.x / y
    }

Обратите внимание, что у меня нет здесь ссылки на SDL, поэтому я не могу дать вам точных членов, но это должно помочь.

NB: Я бы также предположил, что будут проблемы с вашим кодом обработки кнопок. У вас есть оператор if, который проверяет одно значение event.type, но затем внутри его тела есть оператор switch с двумя значениями. Будет выполнено только одно из этих значений - вам, вероятно, следует подумать об использовании двух отдельных операторов if для событий кнопка вниз / вверх.

...