为什么我的碰撞检测可以';t工作,我的角色从右边穿过墙?(SDL,C)
所以问题是我的球员只有从右手边开始才能穿过墙。 在下面的代码中,在switch案例中,我将从右/左手侧的墙检测设置为案例3和案例4。从这个角度来看,这两组代码基本上是以相同的方式工作的。减去移动函数加上的速度。但它只是发生了 以下是触摸墙检测功能:为什么我的碰撞检测可以';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
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;
有人能给我指出正确的方向吗