Math Can';不要让我的物体指向鼠标

Math Can';不要让我的物体指向鼠标,math,opengl,input,sdl,Math,Opengl,Input,Sdl,我正在一个速成课程项目中使用SDL和OpenGL的组合来教自己这一切是如何工作的。我只对OpenGL感兴趣,因为它是在2D游戏中使用加速的一种方式,所以我只需要在2D平面上使用它 今天我的当前版本有很多问题,我希望在单击鼠标按钮时有一个对象指向鼠标,然后在抬起鼠标后当然保持指向该方向 void Square::handle_input() { //If a key was pressed if( event.type == SDL_KEYDOWN ) { //Ad

我正在一个速成课程项目中使用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;
}

现在,当我单击该对象时,它会转向并面向左下角,但不再改变方向。如果能在这里得到任何帮助,我将不胜感激。我猜州与民调事件之间可能存在问题,但从我所经历的所有教程来看,我非常确定我已经解决了这个问题。我刚碰上一堵墙,我需要一些建议

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

添加一些与此类似的代码:

if( event.type == SDL_MOUSEMOVE ) {
    // update the mouse position here using event.???.x / y
    }
请注意,我这里没有SDL引用,因此我无法提供确切的成员,但这应该会有所帮助


注意:我也猜你的按钮处理代码会有问题。您有一个if语句,用于检查
事件的一个值。键入
,但在其主体中有一个包含两个值的switch语句。这些值中只有一个会被执行-您可能应该考虑只使用两个单独的if语句来执行按钮按下/按钮按下事件。

Yay!谢谢,我让它工作了,但由于某种原因,它的温度下降了90度,但它现在确实工作了!这只是一个数学问题,我能处理,测量的轴与我想象的不同。正如你所说,这是一个需要单独事件案例的问题。我想我只是累了,但是添加了一个if(event.type==SDL_MOUSEMOTION&!mouseUp){}修复了这个问题,它只在按下按钮时跟踪鼠标。太好了,非常感谢你!添加一个不起任何作用的if语句来解决您的问题是没有意义的。解决您问题的方法是确保鼠标移动时mousex和mousey始终保持最新状态。@Kylotan-我猜@melignus遗漏了if语句的主体,以节省注释中的空间。