2015-10-18 13 views
1

我只是試圖做一個通用的方法來檢查矩形之間的碰撞。如果你點擊矩形的頂部停止移動。但是,無論x座標如何,我的矩形似乎都會停止。我有三個矩形下降和一個不移動的靜態矩形,它們應該全部落在這個靜態矩形的頂部,但是當我運行代碼時會發生這種情況。 What happens during execution碰撞處理程序不能按指定的方式工作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; 
    } 
} 

但是,如果他們是更遠的代碼完美的作品看。

enter image description here

我也注意到,長方形可以落下通過其他矩形如果是另一個矩形的左邊,但如果進一步在所有正確的它會得到紅,就好像它降落在長方形。上面的圖像工作的唯一原因是因爲最右邊的權利首先下降,左邊的任何東西到另一個矩形將被掛起,如果它落在左邊的矩形之後

我只是看不到我究竟是什麼做任何錯誤的幫助非常感謝!

+0

這將是很好,如果你可以添加什麼一些關於你認爲應該做什麼的代碼的評論,例如你的條件如何。 –

+0

謝謝我現在將添加@PinkieSwirl – Luke

+0

例如:distanceY總是正數,爲什麼測試'distanceY> = -1'?你有沒有改變你的代碼,並沒有適應一些東西? –

回答

1

變更首次公開發售的條件,以更多的東西一般,分配像assignDx和dy一個變量C檢查,如果首次公開招股或kPos是你需要檢查,像這樣

public void assignOx(Vector2 ox){ 
    if(kPos.x > iPos.x){ 
     ox.x = iPos.x; 
     ox.y = iPos.x + iDim.x; 
    }else{ 
     ox.x = kPos.x; 
     ox.y = kPos.x + kDim.x; 
    } 
}