La mejor práctica para usar Sprites en un juego usando AndEngine GLES2

Actualmente estoy teniendo referencia estática a todos mis sprites y cargando e inicializando en mi OnCreateResource mthod de SimpleBaseGameActivity, Pero ahora tengo que anular el oyente onAreaTouched en spirtes y la forma en que puedo anularlo mientras Inicializando el Sprite. Pero tengo un método estático que crea el Atlas y la región de la textura para cada sprite. Y estoy utilizando estos sprites en mi clase de escena y quiero anular onAreaTouched allí. Puedo registerTouchArea para ese sprite específico en mi escena de modo que pueda ser hecha Pero quiero substituir OnAreaTouched de una manera de modo que la reutilización del código pueda ser hecha. Aquí es cómo estoy creando y cargando actualmente sprites.

defualtCageSprite = createAndLoadSimpleSprite("bg.png", this, 450, 444); 

Y este es mi método createAndLoadSimpleSprite.

 public static Sprite createAndLoadSimpleSprite(String name, SimpleBaseGameActivity activity, int width, int height) { BitmapTextureAtlas atlasForBGSprite = new BitmapTextureAtlas( activity.getTextureManager(), width, height); TextureRegion backgroundSpriteTextureRegion = BitmapTextureAtlasTextureRegionFactory .createFromAsset(atlasForBGSprite, activity, name, 0, 0); Sprite sprite = new Sprite(0, 0, backgroundSpriteTextureRegion, activity.getVertexBufferObjectManager()); activity.getTextureManager().loadTexture(atlasForBGSprite); return sprite; } 

Ahora ¿Cómo puedo anular onAreaTouched para algunos sprites sin perder la reutilización del código.

¿Hay alguna razón para cargar las texturas en tiempo de ejecución? La forma normal es cargar todas las texturas requeridas en un solo atlas mientras se carga la aplicación para poder luego usarlas más tarde.

En cuanto a la reutilización del código, la idea de Todilo sobre los enums parece ser más o menos lo que necesita. Digamos, por ejemplo, que tiene dos tipos de objetos: objetos que desaparecen al tocarlos y objetos que vuelan cuando los toca. Enumerar ambas categorías y poner un código en el código de manejo de eventos táctiles que comprueba si el objeto debe desaparecer o volar.

Si no sabe lo que los objetos deben hacer en el tacto antes de ejecutar la aplicación, hay una forma más dinámica de lograr el mismo resultado. Basta con crear dos listas en tiempo de ejecución y poner una referencia al objeto en una de las listas de acuerdo a lo que el objeto debe hacer cuando se toca. A continuación, en el manejo de eventos táctiles hacer algo como esto:

 if (disappearList.contains(touchedObject)) { disappear(object) } if (flyUpList.contains(touchedObject)) { flyUp(object) } 

Malo AndEngine no permite a los usuarios establecer oyentes en sprites, que haría las cosas un poco más fácil.

EDIT: Explicación agregada del uso de BlackPawnTextureBuilder: Tu atlas debe ser del tipo BuildableBitmapTextureAtlas, después agregas todas las texturas como ésta

 BitmapTextureAtlasTextureRegionFactory.createFromAsset(buildableAtlas, this, "image.png")); 

y después de eso

 try { this.buildableAtlas.build(new BlackPawnTextureBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(1)); } catch (final TextureAtlasSourcePackingException e) { Debug.e(e); } 

No sé si esto funcionará para Sprites animados o no, tendrá que probarlo. Además, no hay sobrepasar onTouch, tendrá que hacerlo en el método onAreaTouched. Un ejemplo de tal condición es

 if (pSceneMotionEvent.getAction() == MotionEvent.ACTION_DOWN && disappearList.contains(pTouchArea)) {disappear();} 

¿Estás seguro de que no quieres más funcionalidades que sobreponer a ontouch? ¿Qué te parece la creación de una clase de heredar para sprite para aquellos que necesitan onarea para ser anulada y todas las demás necesidades.

  • Detectar si OpenGl ES 2.0 está disponible o no
  • Problemas de prueba OpenGL ES2 Alpha
  • ¿Textura al revés? | OpenGL-ES 2.0 (Android)
  • Android GLES20.glBlendEquation no funciona?
  • Pasando varias texturas a shader en LibGDX
  • No se puede compilar shader conocido por ser bueno en android
  • Bucle liso del juego del androide
  • OpenGL ES 2.0 múltiples programas o múltiples Shaders o qué? ¿Como funciona?
  • Implementación de problemas GLSurfaceView.Renderer
  • GLES2.0: Usar GL_TEXTURE_EXTERNAL_OES a través de glEGLImageTargetTexture2DOES
  • Compartir el contexto EGL2.0 entre 2 GLSurfaceViews causó EGL_BAD_ACCESS en las tabletas Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.