【发布时间】:2013-03-25 14:13:19
【问题描述】:
我写了一个小程序,当它实现时会阻止一个小正方形穿过一个更大的矩形。
当调用collision() 函数时,它会检查形状是否发生碰撞。目前它执行以下操作:
- 当正方形向形状移动
up时,它不会通过。 (应该这样) - 当正方形向
down移动时,它不会通过。 (应该这样) - 将
right移向形状时,它不会通过。 (但它向上移动一个键 按) - 将
left移向形状时,它不会通过。 (但一键向左移动,一键向上移动)(见图)
这是我的collision() 函数:
if (sprite_Bottom +y_Vel <= plat_Top ){return false;}
else if(sprite_Top +y_Vel >= plat_Bottom ){return false;}
else if(sprite_Right +x_Vel <= plat_Left ){return false;}
else if(sprite_Left +x_Vel >= plat_Right ){return false;}
//If any sides from A aren't touching B
return true;
这是我的move() 函数:
if(check_collision(sprite,platform1) || check_collision(sprite,platform2)){ //if colliding...
if (downKeyPressed ){ y_Vel += speed; downKeyPressed = false;} //going down
else if(upKeyPressed ){ y_Vel -= speed; upKeyPressed = false;} //going up
else if(rightKeyPressed){ x_Vel -= speed; rightKeyPressed = false;} //going right
else if(leftKeyPressed ){ x_Vel += speed; leftKeyPressed = false;} //going left
}
glTranslatef(sprite.x+x_Vel, sprite.y+y_Vel, 0.0); //moves by translating sqaure
我希望 left 和 right 冲突与 up 和 down 一样工作。我的代码对每个方向都使用相同的逻辑,所以我看不出它为什么这样做......
【问题讨论】:
-
if (sprite_Bottom +y_Vel <= plat_Top ){return false;}不应该所有这些都是if (sprite_Bottom +y_Vel + speed <= plat_Top ){return false;}或类似的东西。 -
x_Vel是glVertex的位置,speed是按键移动的量,所以我不这么认为,不。如果你这样做了,广场每次都会在平台内移动得更远。