Mi aplicación activa instancias de sprites alrededor de un lienzo que luego se desplazan por la pantalla hacia una coordenada x/y. Me gustaría poder rotar el sprite alrededor de su centro para que quede frente a sus coordenadas de destino. Estoy usando una hoja de sprite y he tenido problemas con el recorte. También encontré muchos buenos ejemplos, pero nada parece cubrir exactamente lo que estoy buscando. This example is very close pero por eficiencia estoy usando una clase ImagePooler y no puedo volver a cargar una imagen en cada sorteo/rotación. Entonces, si alguien tuviera una idea sobre cómo rotar la imagen precargada sin cortar mi hoja de sprites, estaría muy agradecido.Android: Cómo rotar un sprite animado en movimiento basado en las coordenadas de su destino
5
A
Respuesta
13
En primer lugar, es fácil de rotar un sprite puede utilizar tela o matriz:
Matrix matrix = new Matrix();
matrix.postRotate(angle, (ballW/2), (ballH/2)); //rotate it
matrix.postTranslate(X, Y); //move it into x, y position
canvas.drawBitmap(ball, matrix, null); //draw the ball with the applied matrix
// method two
canvas.save(); //save the position of the canvas
canvas.rotate(angle, X + (ballW/2), Y + (ballH/2)); //rotate the canvas' matrix
canvas.drawBitmap(ball, X, Y, null); //draw the ball on the "rotated" canvas
canvas.restore(); //rotate the canvas' matrix back
//in the second method only the ball was roteded not the entire canvas
Para activar la directa hacia un destino que necesita saber el ángulo entre el sprite y el destino:
spriteToDestAngle = Math.toDegrees(Math.atan2((spriteX - destX)/(spriteY - destY)));
Ahora todo lo que tiene que hacer es usar este ángulo para la rotación de los sprites y ajústelo con un ángulo constante como ShiftShift que depende de dónde apunte inicialmente su sprite.
No estoy seguro de si esto va a funcionar, pero espero que le puede dar algunas ideas ...
0
usando this referance para calcular Ángulo:
private double angleFromCoordinate(double lat1, double long1, double lat2,
double long2) {
double dLon = (long2 - long1);
double y = Math.sin(dLon) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
* Math.cos(lat2) * Math.cos(dLon);
double brng = Math.atan2(y, x);
brng = Math.toDegrees(brng);
brng = (brng + 360) % 360;
brng = 360 - brng;
return brng;
}
y luego gire ImageView a este ángulo
private void rotateImage(ImageView imageView, double angle) {
Matrix matrix = new Matrix();
imageView.setScaleType(ScaleType.MATRIX); // required
matrix.postRotate((float) angle, imageView.getDrawable().getBounds()
.width()/2, imageView.getDrawable().getBounds().height()/2);
imageView.setImageMatrix(matrix);
}
Cuestiones relacionadas
- 1. Cómo calcular el destino de un contentOffset UIScrollView en movimiento
- 2. Cómo rotar el sistema de coordenadas?
- 3. Rotar MapView en Android
- 4. ¿Cómo traduzco correctamente las coordenadas de píxeles a las coordenadas del lienzo en Android?
- 5. Colocar la imagen en las coordenadas Android
- 6. cómo obtener una vista desde las coordenadas de un evento en Android?
- 7. Borde discontinuo animado en Android
- 8. Obtener las coordenadas de un evento táctil en Android
- 9. Voltear un sprite en lienzo
- 10. Cómo obtener las coordenadas de una dirección en android
- 11. JS Google Maps API v3 Marcador animado entre coordenadas
- 12. Cómo rotar MapView?
- 13. iOS: movimiento animado de una etiqueta o imagen
- 14. ¿Cómo puedo tener un movimiento animado suave entre 2 ubicaciones de Google Maps?
- 15. Android: Gif animado
- 16. Mover un uiimageview animado
- 17. en C# ¿cómo rotar picturebox con su imagen?
- 18. ¿Cómo puedo convertir coordenadas en un cuadrado a coordenadas en un círculo?
- 19. Movimiento animado y rotación de UIView no funciona
- 20. Programación de juego basado en coordenadas, como puntos o fichas
- 21. cómo mover objeto sprite usando AndEngine (Android)
- 22. limitando un sprite en cocos2d
- 23. Toque las coordenadas en la vista de texto
- 24. ¿Cómo funcionan las coordenadas de la pantalla de Android?
- 25. ¿Cómo obtengo las coordenadas de toque en un UIButton personalizado?
- 26. cómo obtener las coordenadas de un polígono en OpenLayers
- 27. ¿Cómo paso las coordenadas de origen y destino a la API de indicaciones de Google Maps?
- 28. Traducir las coordenadas del mouse a un plan 3D
- 29. Actualizar un valor en MongoDB basado en su valor actual
- 30. PdfSharp: Rotar una página en un documento
Cada uno de mis sprites tiene sus propios métodos de dibujo donde utilizo un objeto Rectangle para sacar la parte de la hoja de sprites que quiero dibujar, por lo que la opción Matrix parece estar fuera de la questio n (aunque por alguna razón creo que esa es la elección que preferiría). El método Canvas, sin embargo, está funcionando (casi) exactamente como esperaba y con un pequeño ajuste en su código spriteToDestAngle tendré lo que estoy buscando. – bwags
Me alegro de que haya sido útil :) – Lumis