1
我只是試圖做一個通用的方法來檢查矩形之間的碰撞。如果你點擊矩形的頂部停止移動。但是,無論x座標如何,我的矩形似乎都會停止。我有三個矩形下降和一個不移動的靜態矩形,它們應該全部落在這個靜態矩形的頂部,但是當我運行代碼時會發生這種情況。 碰撞處理程序不能按指定的方式工作libgdx java
這裏是衝突處理代碼
float distanceY, furthestLeft;
public void update() {
for (int i = 0; i < stageObjects.size(); i++) {
iPos = stageObjects.get(i).getPosition();
iDim = stageObjects.get(i).getDimensions();
for(int k = 0; k < stageObjects.size(); k++){
kPos = stageObjects.get(k).getPosition();
kDim = stageObjects.get(k).getDimensions();
if(k == i){
continue;
}
distanceY = assignDy();
furthestLeft = assignDx();
//DistanceY is the subtraction of one objects y coordinate and
// if it equals 0 then they are colliding and the furthest left
// is the bottom right x coord of the furthest left objects x
//coord so it should check if this x is contained within an
// objects left x coord to right x coord
if(distanceY <= 1 && distanceY >= 0 && furthestLeft >= iPos.x && furthestLeft <= iPos.x + iDim.x){
stageObjects.get(i).react(Tuples.HIT_BOTTOM);
stageObjects.get(k).react(Tuples.HIT_FROM_TOP);
System.out.println("Collision: " + stageObjects.get(i).toString() + " with " +
stageObjects.get(k).toString());
}
}
}
}
}
public float assignDy(){
if(kPos.y > iPos.y){
return Math.abs(kPos.y - (iPos.y + iDim.y));
}else
return Math.abs(iPos.y - (kPos.y + kDim.y));
}
public float assignDx(){
if(kPos.x > iPos.x){
return kPos.x + kDim.x;
}else
return iPos.x + iDim.x;
}
錯誤就出在這裏和這裏的反應方法
public void react(int occurence){
if(occurence == Tuples.HIT_BOTTOM){
velocity.y = 0;
}
}
但是,如果他們是更遠的代碼完美的作品看。
我也注意到,長方形可以落下通過其他矩形如果是另一個矩形的左邊,但如果進一步在所有正確的它會得到紅,就好像它降落在長方形。上面的圖像工作的唯一原因是因爲最右邊的權利首先下降,左邊的任何東西到另一個矩形將被掛起,如果它落在左邊的矩形之後
我只是看不到我究竟是什麼做任何錯誤的幫助非常感謝!
這將是很好,如果你可以添加什麼一些關於你認爲應該做什麼的代碼的評論,例如你的條件如何。 –
謝謝我現在將添加@PinkieSwirl – Luke
例如:distanceY總是正數,爲什麼測試'distanceY> = -1'?你有沒有改變你的代碼,並沒有適應一些東西? –