AffineTransform rotación y movimiento

Iniciado por gelpack, 25 Abril 2013, 18:36 PM

0 Miembros y 1 Visitante están viendo este tema.

gelpack

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!!

crozz2

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/