如果忽略我的==签名

时间:2015-11-26 15:33:34

标签: c++ sdl

我试图制作游戏(简单的2d平台游戏)。

程序按预期运行,但if语句无法正常运行。

我有这个功能:

    int Collision::platformCollision(SDL_Rect *hitbox, SDL_Rect plat) {
    if (checkCollision(*hitbox, plat)) {
        //X
        //LEFT SIDE
        if (hitbox->x + hitbox->w > plat.x && hitbox->x + hitbox->w < plat.x + 5) {
            hitbox->x = plat.x - hitbox->w;
            return 1;
        }
        //RIGHT SIDE
        if (hitbox->x < plat.x + plat.w && hitbox->x > plat.x + plat.w - 5) {
            hitbox->x = plat.x + plat.w;
            return 2;
        }
        //Y
        //UPPER SIDE
        if (hitbox->y + hitbox->h > plat.y && hitbox->y + hitbox->h < plat.y + 10) {
            hitbox->y = plat.y - hitbox->h;
            return 3;
        }
        //BOTTOM SIDE
        if (hitbox->y < plat.y + plat.h && hitbox->y > plat.y + plat.h - 10) {
            hitbox->y = plat.y + plat.h;
            return 4;
        }

    }
    //NOT COLLIDING
    return -1;
}

所以我有这个函数只要它与平台的某个部分发生碰撞就会返回int

然后我有这个功能:

    void Player::playerCheckPlatCollision(SDL_Rect rect) {
    if (platformCollision(p_hitboxPTR, rect) == 3) {
        setGravityF(0.0);
    }

    if (platformCollision(p_hitboxPTR, rect) == 4) {
        p_space = false;
    }
    return;
}

问题应该很容易解决。 当我调试程序时,它会转到return 4;函数中的platformCollision,但是当我这样做时

if (platformCollision(p_hitboxPTR, rect) == 4) {
        p_space = false;
}

它没有p_space作为false,它只是忽略了== 4,当我调试时,我看到了if if语句。

有人可以帮忙。 感谢。

1 个答案:

答案 0 :(得分:2)

如果platformCollision在第一次调用时返回4,则它会改变状态,并且在第二次调用时不会返回4。

void Player::playerCheckPlatCollision(SDL_Rect rect) {
    int bang = platformCollision(p_hitboxPTR, rect);
    if (bang == 3) {
        setGravityF(0.0);
    } else if (bang == 4) {
        p_space = false;
    }
}