Hola,
estoy haciendo un intento de balon botando y rodando a la vez. He conseguido hacer que bote. Y mediante affineTransform he conseguido que gire. Pero no puedo hacer que hagan las dos cosas a la vez.
Para hacerlo girar
AffineTransform tx = AffineTransform.getRotateInstance(angulo*Math.PI/180,getWidth()/2,getHeight()/2);
y para hacerlo botar
vX=kxVelocidad;
posX+=vX;
vY += Gravedad;
posY += vY;
//++angulo;
//golpear el suelo
if(posY >= suelo && vY > 0) {
posY = (int)(suelo);
vY = -vY + balldegradation;
}
mediante graphics2d
o pinta esto:
g2d.drawImage(image,balon.getX(),balon.getY(), this);
o pinta esto:
g2d.drawImage(image,tx, this);
a ver quién me puede decir cómo funciona realmente affinetransform, porque le doy mil vueltas, y busco en internet, y no logro que haga lo que necesito.
gracias!!
Mira el problema es que AffineTransform mueve todo el sistema de coordenadas, por lo tanto cuando intentas mover hacia abajo (o a cualquier lado) y girar al mismo tiempo lo que logras es que se mueva hacia hacia abajo pero rota, me explico, si tu giras 90grados e intentas mover hacia abajo se moverá hacia la izquierda.
Mi recomendación es que dibujes el balón girando dentro de un control:
public class Balon extends JComponent{
public void paint(Graphics g){
//dibujar balón girando
}
}
y que después lo añadas en el JFrame:
this.add(new Balon());
obviamente puedes configurar el balón antes de agregarlo.
Después puedes encargarle a un hilo que mueva el balón (el control) tal y como si fuera un botón o cualquier otro control de swing.
Espero te sea de ayuda (yo también sufrí ese cambio en el eje de coordenadas jaja por eso lo se).
http://javatap1.blogspot.mx/