math - 无法让我的对象指向鼠标

标签 math opengl input sdl

我在一个速成类(class)项目中结合使用了 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 语句来检查 event.type 的一个值,但在其主体内您有一个包含两个值的 switch 语句。只会执行这些值之一 - 您可能应该考虑仅对按钮按下/按钮弹起事件使用 2 个单独的 if 语句。

关于math - 无法让我的对象指向鼠标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770962/

相关文章:

algorithm - 在快速排序中,如果一个数组是随机的,使用 3 的中位数来选择主元是否重要?

math - 你能解释一下 Reed Solomon 编码部分的单位矩阵吗?

c# - 计算水平轴和两点之间的角度

c - 出现一个额外的输入

html - 如何更改type = time的html输入标签随附的小时钟图标的颜色

python - 如何在 Python 中输入矩阵(二维列表)?

PHP/在表格行中保存数学公式

c++ - glRotatef()在Opengl中工作很奇怪

opengl - 在 opengl 中,为什么我们必须在 gluLookAt 之前执行 gluPerspective?

c++ - 在 VAO 中使用交错数组