Dibujo de un temporizador circular (AndEngine)

Estoy usando AndEngine, y dentro de ese marco, me gustaría hacer un cronómetro circular gráfico. En concreto, me gustaría mostrar el período de espera para la reutilización de una capacidad. La idea es llenar dinámicamente el arco a medida que avanza el temporizador. Algo como esto:

Graphics.fillArc ()

El objeto java.awt.Graphics tiene un método fillArc () que me parece perfecto. De hecho, el gráfico anterior se dibujó utilizando fillArc (50,5,100,100,75, -40). ¡Estupendo! Ahora aquí está el problema:

AndEngine no utiliza objetos Graphics (), utiliza su propia implementación Shape (para OpenGL) y no hay forma definida de "Circle", mucho menos una forma de círculo con un método fillArc ().

Posibles soluciones y sus respectivos problemas

Buscando una solución, encontré " Dibujar un círculo usando Andengine ". Que Q & A no es de mucho uso para mí como la única respuesta "De hecho, no se puede dibujar directamente un círculo" ofrece dos alternativas: (1) "Rendering un quad con una textura de círculo" – esto no funcionará para mí como Necesito modificar dinámicamente el círculo para producir el arcfill; Y (2) "Renderizar un círculo que en realidad es un círculo de triángulos conectados". Tal vez la opción dos funcionaría, pero no hay ninguna orientación sobre cómo hacerlo.

También me encontré con " Crear círculo en android andengine por box2d? ". Sospecho que alguien puede ser tentado a decir, simplemente puede crear un círculo como este:

Cuerpo circleBody = PhysicsFactory.createCircleBody (pWorld, pSprite, BodyType.StaticBody, FixtureDef);

Eso realmente no me ayuda. No estoy buscando crear un cuerpo de física 2D de un círculo. Estoy buscando para mostrar uno.

Finalmente, encontré esta discusión , que es prometedora. En particular, hay una sugerencia:

Utilice Canvas para dibujar [it] en un Bitmap, y cargue ese Bitmap como TextureSource.

Suena razonable, aunque todavía no estoy claro cómo hacerlo.


Actualización: Mi Cheating "Solución"

En lugar de detenerse en esto, decidí engañar (al menos por el momento). Hice un spritesheet que se parece a esto:

Imagen del temporizador de trampa

En lugar de tener el temporizador mostrar el fillArc () perfecto, sólo tirar el índice apropiado del sprite de la hoja de sprites basado en el redondeo de la proporción hecha (de 0 a 1) al índice apropiado en la hoja de sprites. Me gusta esto:

public void setTimer(float amount) { this.setCurrentTileIndex(Math.round(amount * 20)); } 

Para mis propósitos, esto realmente funciona muy bien – estoy usando los temporizadores en unos 2 segundos, por lo que realmente no veo la falta de detalle. Pero tal vez voy a cambiar para reemplazar esto con la solución "apropiada" si alguien la publica. También, tal vez este spritesheet será útil para alguien haciendo lo mismo. Esta es la versión que usa transparencia en lugar de un fondo verde. (Así que es blanco sobre el fondo blanco de stackoverflow, pero está ahí):

Temporizador blanco sobre blanco

Hay una tercera solución que requiere una sola textura y un objeto personalizado. Por lo tanto, es un compromiso entre sus soluciones, donde uno requiere una gran cantidad de triángulos y el otro una memoria de textura.

  1. Sólo necesita una imagen, es decir, el círculo completo en su "secuencia de trucos" anterior.
  2. Cree un objeto personalizado que conste de 8 triángulos (un triángulo "completamente dibujado" representará 45 ° cada uno).
  3. El progreso determina:
    • Cuántos de los triángulos a dibujar. Es decir:
      • 100% ==> 360 ° ==> 8 triángulos completos
      • 50% ==> 180 ° ==> 4 triángulos completos
      • 37,5% ==> 135 ° ==> 3 triángulos completos
      • 25% ==> 90 ° ==> 2 triángulos completos
      • 20% ==> 72 ° ==> 1 triángulo completo y un triángulo con un vértice movido de modo que represente los 27 ° restantes (= 72 ° – 45 °).

Si me preguntan que esta es la mejor solución, ya que puede aplicarse a cualquier textura. =)

  • Tabla de Donuts Android
  • Movimiento circular de objetos de galería con indicador
  • Encuentra el punto en Circle en Android
  • Calcular el ángulo del punto tocado y rotarlo en Android
  • Círculo transparente con borde
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.