我试图制作游戏(简单的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语句。
有人可以帮忙。 感谢。
答案 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;
}
}