Estoy haciendo un juego Java usando fichas. Estoy teniendo problemas con el elemento de colisión. Estoy definiendo rectángulos para cada tesela en el mapa, y otro rectángulo para el jugador. Lo que estoy teniendo problemas es saber de qué lado viene el jugador cuando golpea el rectángulo, y luego empujar al jugador en la dirección en que vino el jugador. Ya hice un método que verifica cuánto está el personaje dentro del rectángulo, de modo que pueda saber cuánto empujarlo, pero no puedo encontrar la forma de decir de qué lado proviene el personaje.Java Tile Game - Detección de colisiones
aquí es mi actual colisión methoe - nota rect1 es el carácter y rect2 es el azulejo
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;
}
}
}
Cualquier ayuda sería muy apreciada
Gracias
Esto dará lugar a una situación extraña, dependiendo del intervalo de paso de tiempo. – Matzi
@Matzi En realidad, no hay nada de validación antes de ejecutar algún comando de usuario; si no lo valida, puede hacer un manejo personalizado. – jmruc
@KirilRaychev Realmente no entiendo lo que está tratando de decir – grimrader22