我正在使用瓷磚製作java遊戲。我遇到碰撞元件有問題。我爲地圖上的每個圖塊定義矩形,併爲玩家定義另一個矩形。我遇到的麻煩是知道玩家在碰到矩形時從哪邊來,然後將玩家從玩家出發的方向推開。我已經制定了一個方法來檢查角色在矩形內的多少,所以它可以知道要推出多少角色,但我無法弄清楚如何判斷角色來自哪個角色。Java瓷磚遊戲 - 碰撞檢測
這裏是我目前的碰撞methoe - 記Rect1的是性格和RECT2是瓷磚
public void collision(Rectangle rect1, Rectangle rect2) {
float xAdd;
float xAdd2;
float yAdd;
float yAdd2;
boolean hitRight = false;
boolean hitLeft = false;
boolean hitTop = false;
boolean hitBot = false;
Vector2f rect1Origin = new Vector2f(rect1.x, rect1.y);
Vector2f rect2Origin = new Vector2f(rect2.x, rect2.y);
Vector2f rect1Mid = new Vector2f((rect1.x + rect1.width)/2,(rect1.y + rect1.height)/2);
Vector2f rect2Mid = new Vector2f((rect2.x + rect2.width)/2,(rect2.y + rect2.height)/2);
Vector2f rect1A = new Vector2f(rect1Origin.x + rect1.width, rect1.y);
Vector2f rect1B = new Vector2f(rect1Origin.x, rect1Origin.y+ rect1.height);
Vector2f rect1C = new Vector2f(rect1Origin.x + rect1.width,rect1Origin.y + rect1.height);
Vector2f rect2A = new Vector2f(rect2Origin.x + rect2.width, rect2.y);
Vector2f rect2B = new Vector2f(rect2Origin.x, rect2Origin.y
+ rect2.height);
Vector2f rect2C = new Vector2f(rect2Origin.x + rect2.width,
rect2Origin.y + rect2.height);
xAdd = rect2C.x - rect1B.x;
xAdd2 = rect1C.x - rect2B.x;
yAdd = rect2A.y - rect1B.y;
yAdd2 = rect2C.y - rect1A.y;
if (rect1Mid.y < rect2Mid.y) {
if (rect1.intersects(rect2)) {
y_pos += yAdd;
}
}
if (rect1Mid.y > rect2Mid.y) {
if (rect1.intersects(rect2)) {
System.out.println(yAdd2);
y_pos += yAdd2;
}
}
if(rect1Mid.x > rect2Mid.x){
if(rect1.intersects(rect2)){
hitRight = true; x_pos += xAdd;
}
}
if(rect1Mid.x< rect2Mid.x){
if(rect1.intersects(rect2)) {
x_pos += -xAdd2;
}
}
}
任何幫助,將不勝感激
感謝
這將導致奇怪的情況,這取決於時間間隔。 – Matzi 2012-04-29 15:32:36
@Matzi在執行某些用戶命令之前,並不是真正的驗證事情 - 如果它不驗證,您可以執行自定義處理。 – jmruc 2012-04-29 15:36:30
@KirilRaychev我真的不明白你想說什麼 – grimrader22 2012-04-29 15:39:58