Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] aplicar este método a través de los if

Estas en el tema de aplicar este método a través de los if en el foro de Java en Foros del Web. buenas, tengo esta formula para la interacción entre una pelota y un rectángulo, el caso es que he conseguido que funcione, pero solo el rebote ...
  #1 (permalink)  
Antiguo 15/12/2014, 15:41
dr4
 
Fecha de Ingreso: noviembre-2014
Mensajes: 28
Antigüedad: 9 años, 5 meses
Puntos: 0
aplicar este método a través de los if

buenas, tengo esta formula para la interacción entre una pelota y un rectángulo, el caso es que he conseguido que funcione, pero solo el rebote hacía un lado, si por ejemplo quiero que al golpear por arriba rebote lo que pongo es if (y==1){y=-1} así le digo que si la dirección y es positiva (la pelota esta bajando) al tocar tiene que ser negativa (la pelota empezará a subir y producirá la sensación de rebote) el problema es que si le pongo lo mismo por abajo if(y==-1){y=1} la pelota se vuelve loca en el sitio, podría solucionarlo con un timer creo porque lo que creo que pasa es que intenta ejecutar los dos if a la vez al hacer contacto, pero ya no se me ocurre nada para que pueda rebotar por los lados del rectángulo (al tocar ahí hace efecto tunel, se mete dentro hasta salir por el otro lado), se que tendría que manejar las x para cambiar la dirección lateral pero si le pongo que al hacer contacto cambie la dirección de la x me la cambiara cuando choque en cualquier parte del rectangulo, tengo entendido que con esta formula puedo manejar el rebote en los cuatro lados del rectángulo pero no estoy sabiendo aplicarlo, alguien podría decirme como podría hacerlo?

100 es la posición x del rectángulo.
300 es la posición y del rectángulo
170 es el ancho del rectángulo
30 es el alto del rectángulo
circlex lo posición x del centro del circulo
circley es la posición y del centro del rectángulo



public boolean golpe(Pelota circle) {

double circleDistanceX = Math.abs(circle.centrox - 100 - 170/2);
double circleDistanceY = Math.abs(circle.centroy - 300 - 30/2);

if (circleDistanceX > (170/2+ circle.radio)) { return false; }
if (circleDistanceY > (30/2 + circle.radio)) { return false; }

if (circleDistanceX <= (170/2)) { return true; }
if (circleDistanceY <= (30/2)) { return true; }

double cornerDistance_sq = Math.pow(circleDistanceX - 170/2, 2) + Math.pow(circleDistanceY - 30/2, 2);

return (cornerDistance_sq <= (Math.pow(circle.radio, 2)));



}

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:39.