如果我將播放器的「高速」變量(水平速度)設置爲足夠低的速度,那麼當他超過16x16塊的差距時,按計劃完成。然而,如果我將「高速」變量設置得足夠高,他會走得很快,以至於他在它上空盤旋。 所有雖然它工作時,我把它設置爲一個低速,它是太慢。2D Box-Collisions,Platformer,我的播放器「懸停」在塊上
下面是一個例子: http://img199.imageshack.us/img199/2685/demondj.png
這裏是我撞的代碼(遍歷塊列表):
for(unsigned int i = 0; i<blocks.size(); i++){
Block &b = blocks.at(i);
if(!b.passable){
//Check if we are on the sides
if(y + height + vspeed >= b.worldY+2 && y + vspeed <= b.worldY+b.height)
{
//Right side
if(x + hspeed <= b.worldX+b.width+1 && x + hspeed > b.worldX+b.width + hspeed-1)
{
x = b.worldX + b.width; hspeed = 0;
}
//Left side
if(x + width + hspeed >= b.worldX +1 && x + width + hspeed <= b.worldX + hspeed + 1)
{
x = b.worldX - width; hspeed = 0;
}
}
//Check if we are on the top or the bottom
if(x + width + hspeed >= b.worldX+1 && x + hspeed <= b.worldX+b.width-1)
{
if(y + height + vspeed >= b.worldY && y + height + vspeed <= b.worldY + vspeed + 1 && jumpstate=="falling")
{
y = b.worldY - height; jumpstate.assign("ground"); vspeed = 0;
}
if(y + vspeed <= b.worldY + b.height && y + vspeed >= b.worldY + b.height + vspeed + 1 && jumpstate=="jumping")
{
y = b.worldY + b.height; jumpstate.assign("falling"); vspeed = 0;
}
}
}
}
我必須在我的碰撞代碼有問題嗎? 另一個問題是,當我碰到一個街區的底部時,這有點讓人毛骨悚然。 他應該立刻跳出來,而他確實如此,但是如果他正在移動並且他撞到了一個街區的底部,他就會不安。