Rotazione di telecamera ortografica

Sono in grado di ruotare la camera con questo codice

camera.zoom = 3//in constructor if(camera.zoom>1) { camera.zoom-=0.01f; camera.rotate(15); } 

questo è fatto in rendering, ora l'effetto di zoom funziona correttamente, ma quando lo zoom completa la mia schermata rimane rotata con l'angolo corrente. come sotto. immettere qui la descrizione dell'immagine

  • Come confrontare due arrayslist?
  • Come determinare se una vista è visibile in un ListView?
  • Impedire copie multiple di un servizio Android
  • Crea Android con Superuser
  • Timepicker semplice per un'attività di frammento
  • Android: Stato button modificato evento
  • Voglio che il mio schermo si ferma dopo aver zoomato a 0 gradi.

  • Android Il modo migliore per convertire l'arrays di byte a Bitmap?
  • IBM Worklight - Imansible get la forza del segnale di networking in Android
  • ClassNotFoundException quando include un jar di libreria
  • Android ViewPager con RecyclerView funziona correttamente all'interno di BottomSheet
  • Dialogo di verifica di Android (facile)
  • ByteBuffer non rilascia la memory
  • 4 Solutions collect form web for “Rotazione di telecamera ortografica”

    Nel tuo snippet di codice

     **camera.zoom=3;** 

    e in each iterazione stai ingrandendo la camera da 0,01 fino a camera.zoom> 1 in modo da avere 20 iterazioni totali per lo zoom

    Quindi ruotare con angolo di 18 gradi dopo iterazione ruoterà in 360 gradi.

    Ho scritto questo metodo per calcolare l'angolo corrente della camera:

     public float getCameraCurrentXYAngle(Camera cam) { return (float)Math.atan2(cam.up.x, cam.up.y)*MathUtils.radiansToDegrees; } 

    Quindi chiamo rotazione come questo:

     camera.rotate(rotationAngle - getCameraCurrentXYAngle(camera)); 

    Questo codice funziona, ma ruoterà immediatamente in una chiamata. per ruotarla per una velocità, è necessario calcolare l'appropriata 'rotationAngle' per each fotogramma.

    Hai provato a ruotare un multiplo di 1,8 gradi con each iterazione? Allora l'image dovrebbe avere completato un numero di rotazioni complete una volta che le 200 iterazioni sono passate.

    attenzione, il computer non può rappresentare correttamente i numbers più reali!

    in binario 0.01 è un numero periodico, quindi sarà troncato / arrotondato.

    la sottrazione / l'aggiunta di numbers di galleggiante poche centinaia di volte aggiungerà l'errore di arrotondamento e dando così risultati terribilmente sbagliati.

    (ad esempio dopo 200 sottrazioni, il valore della tua camera.zoom sarà ~ 1.0000019 – NON 1.0!)

    è per questo che il ciclo viene ripetuto 201 volte, dandovi un valore di zoom di 0.9900019 e una rotazione di 361.7996 ~ 361.8 (quando si utilizza 1.8 come nella risposta di alex).

    è ansible utilizzare le funzioni di interpolazione libGDX:

     time += Gdx.graphics.getDeltaTime(); //the rounding error is futile here, //because it'll increase the animation time by max. 1 frame camera.zoom = Interpolation.linear.apply(3, 1, Math.min(time, 1)); camera.rotate = Interpolation.linear.apply(0, 360, Math.min(time, 1)); 

    questo codice creerebbe un'animation di un secondo di zoom da 3 a 1 e ruotare da 0 a 360 (semplicemente un'intera roazione)

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.