2012-06-02 16 views
11

En las dos imágenes adjuntas, la captura de pantalla del escritorio de libgdx funciona como se esperaba. La captura de pantalla de mi Galaxy Nexus lamentablemente no es la esperada. Intento crear un desenfoque de movimiento o un efecto de sendero simple.Resultados inesperados implementando desenfoque de movimiento simple en Libgdx

Rendering como esperaba en mi escritorio. Libgdx running on my desktop, working as expected

No se muestra como esperaba en mi Galaxy nexus. Libgdx running on my Galaxy Nexus not working as expected

Las texturas circulares se dibujan en un bucle for durante el renderizado y el efecto se logra con un mapa de puntos utilizando el RGBA de 0, 0, 0, 0.1f dibujado antes de los círculos.

creación screenClearSprite

Pixmap screenClearPixmap = new Pixmap(256, 256, Format.RGBA8888); 
screenClearPixmap.setColor(Color.rgba8888(0, 0, 0, 0.1f)); 
screenClearPixmap.fillRectangle(0, 0, 256, 256); 
screenClearTexture = new Texture(screenClearPixmap); 
screenClearSprite = new Sprite(screenClearTexture); 
screenClearSprite.setSize(screenWidth, screenHeight); 
screenClearPixmap.dispose(); 

Render

batch.begin(); 
font.draw(batch, "fps:" + Gdx.graphics.getFramesPerSecond(), 0, 20); 
screenClearSprite.draw(batch); 
for (int i = 0; i < circleBodies.size(); i++) { 
    tempPos = circleBodies.get(i).getPosition(); 
    batch.draw(circleTexture, (tempPos.x * SCALE) + screenWidthHalf 
      - circleSizeHalf, (tempPos.y * SCALE) + screenHeightHalf 
      - circleSizeHalf); 
} 
batch.end(); 

Entonces, ¿qué hice mal? Tal vez hay una mejor manera de obtener el efecto de movimiento "desenfoque de movimiento"?

+0

¿Puede reproducir este comportamiento en otros dispositivos con Android? –

+1

¿Estás seguro de que hay un problema porque las bolas de la segunda captura de pantalla parecen moverse lentamente en comparación con las bolas de la primera captura de pantalla? ¿Cuál es tu ciclo de juego? ¿Utiliza la hora actual para calcular el desenfoque de movimiento? Puede ser que la CPU del nexo sea mucho más rápida/más lenta en comparación con la CPU de su PC. –

+0

Sí esto reproducible en mi Vibrant y Galaxy Nexus S. En cuanto a la falta de definición, no es ningún cálculo de desenfoque de movimiento. El desenfoque de movimiento puede no ser el término más preciso para el efecto. El efecto que estoy buscando se muestra con precisión en la imagen superior. El problema parece ser que la Textura dibujada como una capa de opacidad no calcula hasta 1 correctamente. Esto causa el desagradable rayado que no puedo explicar, ya que funciona como se esperaba en mis dos pc. –

Respuesta

0

Aquí hay un enfoque diferente, donde borra su pantalla cada vez con color sólido y sin alfa.

Esto significa que tendrá que modificar su código un poco. Lo bueno de esto, es que la forma en que lo está haciendo tiene algunos defectos: desdibujará todo en movimiento, no solo las bolas. Y puede producir resultados/artefactos feos a menos que tenga cuidado.

  1. hacer lo mismo que usted está haciendo ahora, pero en vez de sacar las bolas para el lote, dibuje en ellas una textura/mapa de bits/lo que sea. Luego, cada cuadro agrega una imagen alfa-mezclada sobre la imagen de las bolas, y luego dibuja las bolas en su posición actual sobre eso. Luego agrega esa imagen a tu pantalla. Muy parecido a lo que estás haciendo ahora, excepto que atraes hacia otra cosa y la mantienes. De esta forma, no tiene que depender de la ventana gráfica en la que está dibujando, y puede mantener todo separado. Este método es similar al de un buffer de acumulación.

  2. En lugar de hacerlo de la forma en que lo hace, puede realizar un seguimiento de las n últimas posiciones de cada bola. Y luego dibuje todos ellos cada cuadro, con diferentes alfa. Esto es muy fácil de implementar. Puede dar lugar a muchas llamadas de dibujo si tiene muchas bolas o una gran n, pero si no es demasiado, no debería limitar su fps y le da un buen control.

+0

# 1 es probablemente la mejor opción. Implementé el # 2 pero las bolas deben moverse muy rápido para ver el camino, así que necesito cambiar la frecuencia con la que guardo la ubicación anterior para obtener un buen camino largo. Como alternativa, y no puedo probar esto hasta más tarde, es que tal vez el sprite mismo permite la modificación de alfa, que sería el mismo enfoque que mi original, pero podría funcionar como se esperaba. Entonces crea el mapa de puntos con alfa de 1 y luego usa un sprite alpha de 0.1f. ¿Los sprites tienen esa capacidad en Libgdx? –

+0

@tencent Puede usar 'glBlendFunc' junto con' glBlendColor' para mezclar multiplicativamente el color de la textura con un color constante. –

0

Tal vez hay una mejor manera de conseguir el efecto de 'desenfoque de movimiento' de movimiento?

con el fin de hacer que el desenfoque de movimiento en mi juego yo uso otra approch "El efecto de partículas" funciona realmente bien conmigo y no tienen problemas de Android/o de escritorio con diferentes dispositivos android

todo lo que tiene que hacer es usar "Editor de efectos de partículas" de Libgdx y hacer su efecto, luego cargarlo en su proyecto, finalmente dibujarlo en la misma posición que dibuje su objeto (y también dibujar su objeto)

Consejos para crea el archivo de efecto correcto con Paticle Editor:

  • conjunto (uso) de la misma imagen del objeto que desea desenfoque de movimiento en el efecto de partículas

  • intento de limitar el número de: el número máximo de partículas permitido

  • Desactivar la "velocidad" y "ángulo" parámetro

Particle efecto ayuda a hacer efecto de movimiento Espero que esto ayude a alguien !

Cuestiones relacionadas