用C+交换对象+;和SDL2.0 我正在用C++和SDL开发一个游戏,遇到了一个我无法理解的错误(在SDL或我的代码中)。 基本上,我有一个珠宝般的克隆,我有一个简单的功能可以交换成碎片(现在不看限制)。发生的事情是,只有当第一个选择的X或Y大于第二个时,我才能交换这些碎片,这就转化为只能向上或向左交换它们。 我已经反复检查了我的代码,即使在调试时,我也可以看到交换操作正确完成,但我的第二个选定的部分仍然是选定的,如果我在电路板外部或左侧或上方的某个部分按下,则会注册一个新的交换

用C+交换对象+;和SDL2.0 我正在用C++和SDL开发一个游戏,遇到了一个我无法理解的错误(在SDL或我的代码中)。 基本上,我有一个珠宝般的克隆,我有一个简单的功能可以交换成碎片(现在不看限制)。发生的事情是,只有当第一个选择的X或Y大于第二个时,我才能交换这些碎片,这就转化为只能向上或向左交换它们。 我已经反复检查了我的代码,即使在调试时,我也可以看到交换操作正确完成,但我的第二个选定的部分仍然是选定的,如果我在电路板外部或左侧或上方的某个部分按下,则会注册一个新的交换,c++,sdl,C++,Sdl,我的代码如下 (...) case SDL_MOUSEBUTTONDOWN: mCurrentSprite = BUTTON_SPRITE_MOUSE_DOWN; setPressed(true); gPressedButtons[pressedCount] = this; pressedCount++; if (pressedCount == 2) {

我的代码如下

(...)
case SDL_MOUSEBUTTONDOWN:
            mCurrentSprite = BUTTON_SPRITE_MOUSE_DOWN;
            setPressed(true);
            gPressedButtons[pressedCount] = this;
            pressedCount++;
            if (pressedCount == 2)
            {
                swapSquares();
                pressedCount = 0;
                gPressedButtons[0]->setPressed(false);
                gPressedButtons[1]->setPressed(false);
            }
            break;
(...)
void swapSquares()
{
int tempType;
tempType = gPressedButtons[0]->getType();
gPressedButtons[0]->setType(gPressedButtons[1]->getType());
gPressedButtons[1]->setType(tempType);
if (tempType == gPressedButtons[1]->getType() || tempType1 == gPressedButtons[0]->getType())
{
    OutputDebugString(TEXT("swap done correctly\n"));
}
}

然后根据它们的类型渲染这些片段,因此我交换它们。你知道这有什么问题吗?为什么它在某些情况下工作,而在其他情况下不工作?

它如何与事件处理循环一起工作?gPressedButtons是全局方法还是私有方法?从两个不同的tile调用的object方法(我从
this
关键字推断)可以同时切换吗?我在修复其他一些bug的同时设法解决了它,不记得具体是如何解决的。但是谢谢你的帮助!:)它如何与事件处理循环一起工作?gPressedButtons是全局方法还是私有方法?从两个不同的tile调用的object方法(我从
this
关键字推断)可以同时切换吗?我在修复其他一些bug的同时设法解决了它,不记得具体是如何解决的。但是谢谢你的帮助!:)