为什么我的碰撞检测可以';t工作,我的角色从右边穿过墙?(SDL,C)

为什么我的碰撞检测可以';t工作,我的角色从右边穿过墙?(SDL,C),c,sdl,collision-detection,C,Sdl,Collision Detection,所以问题是我的球员只有从右手边开始才能穿过墙。 在下面的代码中,在switch案例中,我将从右/左手侧的墙检测设置为案例3和案例4。从这个角度来看,这两组代码基本上是以相同的方式工作的。减去移动函数加上的速度。但它只是发生了 以下是触摸墙检测功能: if (tileset[i].mType == TILE_BRICK || tileset[i].mType == TILE_FLOOR) { SDL_Rect Tilebox = { tileset[i].mBox.x,ti

所以问题是我的球员只有从右手边开始才能穿过墙。 在下面的代码中,在switch案例中,我将从右/左手侧的墙检测设置为案例3和案例4。从这个角度来看,这两组代码基本上是以相同的方式工作的。减去移动函数加上的速度。但它只是发生了

以下是触摸墙检测功能:

if (tileset[i].mType == TILE_BRICK || tileset[i].mType == TILE_FLOOR)
    {
        SDL_Rect Tilebox = { tileset[i].mBox.x,tileset[i].mBox.y, SCREEN_TILE_WIDTH, SCREEN_TILE_HEIGHT };

        //If the collision box touches the wall tile
        situation = checkCollision(Characbox, Tilebox);    
        
        switch (situation) {
            case 1://wall below detected
                y = tileset[i].mBox.y - DOT_HEIGHT;
                flyFlag = 0;    
                vertVelocity = 0;
                pikaInfo[4] = 0;
                break;
            case 2://wall above detected
                //pikaInfo[2] -= vertVelocity;
                pikaInfo[2] += 3;
                vertVelocity = 0;
                break;
            case 3://right hand side wall detected
                x -= pikaV;
                pikaV = 0.001;
                break;
            case 4: //left hand side wall detected
            {
                x -= pikaV;
                printf("%d\n", x);
                pikaV = -0.001;
            }
                break;
            default:
                break;
        }
        
    }
    //x-axis 
if (par[5]) {
    if (pikaAcceleration >= 0.001) {
        if (pikaV >= VELOCITY_MAX + velocityMaxAddjustByWind) {
            pikaV = VELOCITY_MAX + velocityMaxAddjustByWind;
        }
        else {
            pikaV += pikaAcceleration;
            //printf("%lf\n", pikaV);
        }
    }
    else if (pikaAcceleration <= -0.001) {
        if (pikaV <= (VELOCITY_MAX * -1) + velocityMaxAddjustByWind) {
            pikaV = (VELOCITY_MAX * -1) + velocityMaxAddjustByWind;
        }
        else {
            pikaV += pikaAcceleration;
            //printf("%lf\n", pikaV);
        }
    }
}
else if (pikaV >= 1 || pikaV <= -1) {
    pikaV += pikaAcceleration;
    //printf("%lf\n", pikaV);
}
else {
    if (pikaAcceleration > 0.001) {
        pikaInfo[3] = 3;
        //printf("a: %lf\n", pikaAcceleration);
    }
    else if (pikaAcceleration < -0.001) {
        pikaInfo[3] = 2;
        //printf("a: %lf\n", pikaAcceleration);
    }
    pikaV = 0;
    pikaAcceleration = 0;
}

par[1] += pikaV;
这是我的移动功能:

if (tileset[i].mType == TILE_BRICK || tileset[i].mType == TILE_FLOOR)
    {
        SDL_Rect Tilebox = { tileset[i].mBox.x,tileset[i].mBox.y, SCREEN_TILE_WIDTH, SCREEN_TILE_HEIGHT };

        //If the collision box touches the wall tile
        situation = checkCollision(Characbox, Tilebox);    
        
        switch (situation) {
            case 1://wall below detected
                y = tileset[i].mBox.y - DOT_HEIGHT;
                flyFlag = 0;    
                vertVelocity = 0;
                pikaInfo[4] = 0;
                break;
            case 2://wall above detected
                //pikaInfo[2] -= vertVelocity;
                pikaInfo[2] += 3;
                vertVelocity = 0;
                break;
            case 3://right hand side wall detected
                x -= pikaV;
                pikaV = 0.001;
                break;
            case 4: //left hand side wall detected
            {
                x -= pikaV;
                printf("%d\n", x);
                pikaV = -0.001;
            }
                break;
            default:
                break;
        }
        
    }
    //x-axis 
if (par[5]) {
    if (pikaAcceleration >= 0.001) {
        if (pikaV >= VELOCITY_MAX + velocityMaxAddjustByWind) {
            pikaV = VELOCITY_MAX + velocityMaxAddjustByWind;
        }
        else {
            pikaV += pikaAcceleration;
            //printf("%lf\n", pikaV);
        }
    }
    else if (pikaAcceleration <= -0.001) {
        if (pikaV <= (VELOCITY_MAX * -1) + velocityMaxAddjustByWind) {
            pikaV = (VELOCITY_MAX * -1) + velocityMaxAddjustByWind;
        }
        else {
            pikaV += pikaAcceleration;
            //printf("%lf\n", pikaV);
        }
    }
}
else if (pikaV >= 1 || pikaV <= -1) {
    pikaV += pikaAcceleration;
    //printf("%lf\n", pikaV);
}
else {
    if (pikaAcceleration > 0.001) {
        pikaInfo[3] = 3;
        //printf("a: %lf\n", pikaAcceleration);
    }
    else if (pikaAcceleration < -0.001) {
        pikaInfo[3] = 2;
        //printf("a: %lf\n", pikaAcceleration);
    }
    pikaV = 0;
    pikaAcceleration = 0;
}

par[1] += pikaV;
有人能给我指出正确的方向吗