如何使用SDL切换点击事件?

时间:2017-08-14 18:39:17

标签: c++ click toggle sdl

我正在努力实现的目标:

  • 当用户点击游戏时,用户点击的图块将显示边框
  • 如果用户再次点击(任何地方)边框消失

到目前为止我所拥有的:

  • 当用户点击游戏时,边框会出现在选定的图块
  • 周围

我似乎无法弄清楚(我已经尝试了所有我能想到的)

  • 如何在再次点击后让边框消失

关于我的代码:

我有一个MouseInput类,用于检查是否按下了鼠标左键。我正在使用布尔变量来尝试切换将显示切片边框(如果单击)或不显示边框(如果再次单击)的变量。我的代码将允许边框显示,但我无法让它在另一次点击时消失。我无法真正展示我尝试的所有东西(已经尝试了2天而且不记得我做了什么)。到目前为止,这是我的代码的一部分:

bool toggle; // Set to false in constructor
bool justPressed; // Set to false in constructor
bool justReleased; // Set to false in constructor

void Mouse::Update() // My custom mouse class Updating function (updates position, etc)
{
    input.Update(); // My MouseInput class Updating function.

    if (input.Left() && !toggle) // input.Left() checks if left mouse was pressed. True if it is pressed down, and false if it's not pressed.
    {
        // So we have pressed the mouse
        justPressed = true;
        justReleased = false;
        printf("UGH FML");
    }
    else if (!input.Left()) // So the mouse has been released (or hasn't clicked yet)
    {
        justPressed = false;
        justReleased = true;
    }

    if (justPressed)
    {
        toggle = true;
    }
}

我已经尝试了一切我能想到的切换回假。而现在我的大脑正在受伤。可能有一个真正简单的解决方案,但我无法绕过它。建议?

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是以下代码块:

if (input.Left() && toggle) { //mouse is pressed and toggle is already true
    toggle = false;
}

您还应删除以下代码块,因为如果按下它将设置切换为true,无论切换是否已经为真:

if (justPressed) {
    toggle = true;
}

相反,您可以直接在if对应于初始点击的内部设置切换:

if (input.Left() && !toggle) { //mouse is pressed and toggle is false
    toggle = true;
}

如sp2danny所述,这两个块可以简化为:

if (input.Left()) { //mouse is pressed
    toggle = !toggle;
}