過去幾天我一直在嘗試將簡單的碰撞加入到我的簡單遊戲中。我在互聯網上看過很多地方,但我沒有發現任何有用的東西。我只是使用包圍盒,我想讓玩家盒子在四個方面中的任何一個碰到方塊時停止(並且不會卡住或反彈方塊)。聽起來不難,但我發現它非常困難。我真的只是想知道我需要放在if語句的括號中的代碼,我已經閱讀並聽到了我可以採用的所有理論。如果可以的話請幫忙。如何在檢測到碰撞後處理碰撞
if(bb_collide(player,block)){ //detection works just fine,
//just not sure what to do afterwards
}
else{
player.setX((player.getX() + velx));
player.setY((player.getY() - vely));
player.set_coll(player.getX(),player.getY(),player.getWidth(),player.getHeight());
block.set_coll(block.getX(),block.getY(),block.getWidth(),block.getHeight());
}
其實我想通了,我只是有一對夫婦的壞日子,對不起,如果我有像一個態度不好或者什麼,但我得到它做什麼,我想它。如果有人感興趣,我會怎麼做,因爲它適用於一個運動物體(動子)撞到另一個靜止物體(保姆)。它發現碰撞的兩側之間的距離,並將速度設置爲該距離減去幾個因此它不重疊。我有邊界框渲染,所以我可以看到它們重疊。感謝您的回覆!
public void Fix_Vel(Player mover, Terrain sitter){
if(sitter.coll_box.contains(mover.getX() + mover.getHeight() + mover.getVelX(), mover.getY()) ||
sitter.coll_box.contains(mover.getX() + mover.getHeight() + mover.getVelX(), mover.getY() + mover.getHeight())){ //mover top right and bottom right coords right collision testing
mover.setVelX(sitter.getX() - (mover.getX() + mover.getWidth()) - 2);
}
if(sitter.coll_box.contains(mover.getX() + mover.getVelX(), mover.getY()) ||
sitter.coll_box.contains(mover.getX() + mover.getVelX(), mover.getY() + mover.getHeight())){ //mover top left + bottom left coords left collision testing
mover.setVelX((sitter.getX() + sitter.getWidth()) - mover.getX() + 2);
}
if(sitter.coll_box.contains(mover.getX(), mover.getY() + mover.getVelY()) ||
sitter.coll_box.contains(mover.getX() + mover.getWidth(), mover.getY() + mover.getVelY())){ //mover top left + top right coords top collision testing
mover.setVelY((sitter.getY() + sitter.getHeight()) - mover.getY() + 2);
}
if(sitter.coll_box.contains(mover.getX(), mover.getY() + mover.getHeight() + mover.getVelY()) || //mover bottom left and bottom right coords bottom collision testing
sitter.coll_box.contains(mover.getX() + mover.getWidth(), mover.getY() + mover.getHeight() + mover.getVelY())){
mover.setVelY(sitter.getY() - (mover.getY() + mover.getHeight()) - 2);
jumping = false;
if(mover.getVelY() < 0)
mover.setVelY(0);
}
}
所以你想要一個物品堅持碰撞的元素? – 2013-05-14 11:39:41