无法让我的对象指向鼠标

时间:2010-05-05 06:08:53

标签: math opengl input sdl

我在一个速成课程项目中使用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 个答案:

答案 0 :(得分:3)

我假设您希望对象在按住鼠标按钮时指向鼠标的位置。要解决此问题,每次移动鼠标时都必须更新鼠标位置。

添加一些类似的代码:

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

请注意,我这里没有SDL参考,所以我不能给你确切的成员,但这应该会有所帮助。

注意:我还猜测您的按钮处理代码会出现问题。你有一个if语句检查event.type的一个值,但是在它的主体内你有一个带有两个值的switch语句。只会执行其中一个值 - 您应该考虑为按钮按下/按钮事件使用2个单独的if语句。