java - Desarrollo del juego, extraño efecto de imagen al mover la cámara.
android andengine (5)
Algunos dispositivos (Xperia Play) sangran en todas partes al tratar de dibujar cosas que se mueven rápidamente. Por ejemplo, un icono rojo en la lista de aplicaciones deja un borrón detrás de él. Puede probar la aceleración de hardware en el manifiesto (activar y desactivar) para ver si hay una diferencia.
Probablemente obtendrías el mismo efecto si no estuvieras usando svg
Estoy desarrollando Side Scroll 2D Game, usando AndEngine
Estoy usando su extensión SVG (estoy usando un gráfico vectorial)
Pero descubrí un efecto extraño y feo, mientras movía mi reproductor (mientras la cámara está persiguiendo al jugador exactamente, significa que la cámara está cambiando de posición)
Las imágenes de mis sprites se ven simplemente diferentes, son borrosas o hay efectos como esas imágenes se moverían (no cambian su posición, solo son temblorosas, es muy difícil de explicar y llamar a este efecto correctamente) Esperemos que esta imagen lo explique un poco :
Es más o menos, cómo se ve en el juego, donde:
a) La imagen "PRIMERA" se muestra cuadrada, mientras el jugador se está moviendo (la CÁMARA no es) la imagen se ve como debería
b) "SEGUNDA" la misma imagen, pero con este extraño efecto "que se parece a una imagen en movimiento / desenfoque durante el movimiento de la cámara [persiguiendo al jugador])
Un amigo mío me dijo que podría ser un problema de hardware:
"la imagen borrosa que observa es en realidad un problema de hardware. Algunos teléfonos" suavizan "el contenido de la pantalla para dar una mejor sensación a las aplicaciones. No sé si es la pantalla o el procesador de gráficos, pero no ocurre en el Samsung Captivate de mi esposa. Ocurre en mi Atrix y Xoom. Es realmente notable en el Xoom debido al gran tamaño de la pantalla ".
Pero parece que hay una manera de evitarlo, ya que he probado muchos juegos similares, donde la cámara está persiguiendo al jugador, y no pude notar tal efecto.
¿Hay alguna manera de desactivar esto en el código?
Estoy agradecido por las respuestas anteriores, desafortunadamente, todavía existen problemas.
Hasta ahora, he intentado:
- casting (int) en el método setCenter que se está ejecutando en updateChaseEntity
- Juego de prueba con imágenes PNG, en lugar de la extensión SVG y el gráfico vectorial
- diferentes TextureOptions
- aceleracion de hardware
Si alguien tiene una idea diferente, lo que puede causar este extraño efecto, estaría realmente agradecido por la ayuda, gracias.
Cuando su jugador solo va hacia la derecha y la cámara comienza a perseguirlo, todos los demás sprites, excepto el jugador, se están moviendo hacia la izquierda. Intente imprimir las coordenadas absolutas de su sprite "borroso" (o algunos de sus puntos de anclaje) en el registro. La coordenada X del sprite debería estar disminuyendo linealmente. Si nota que está aumentando algunas veces, podría ser un motivo de desenfoque.
Espero que esto ayude.
La mejor manera de depurarlo es probar un sprite de aspecto diferente. Tal vez sea solo el lento tiempo de respuesta de la pantalla de su dispositivo. También soy un desarrollador de Andengine, y nunca he visto tal comportamiento.
A veces arreglas jittering usando FixedStepEngine, podría ayudar.
Si puede publicar su código tal vez podamos ayudarle mejor.
No estoy familiarizado con este motor, pero me pregunto por qué usaría gráficos vectoriales para el estilo artístico pixelado. Me sorprendería si tu personaje en la captura de pantalla es realmente un arte vectorial ... ¿quizás es textura importada en SVG? Intenté volver a usar el flash unas cuantas veces y estaba cometiendo el mismo error ... No estoy diciendo que no sea posible, pero no pretende crear pixel art con flash ni ningún otro software vectorial. Hay una razón por la que la mayoría de los juegos flash tienen un aspecto similar.
Parece que se debe a que la cámara se mueve en incrementos reales, lo que hace que los componentes SVG descansen en límites no enteros, y el renderizador SVG que hace que el suavizado se active para demostrarlo. Intente mover la cámara en incrementos de enteros colocando los valores de la cámara en int.