2016-04-02 11 views
0

J'utilise Box2DLights dans un de mes projets. J'ai travaillé sur ce projet pendant quelques mois maintenant, et j'ai juste essayé de le porter sur Android, pour voir à quoi ça ressemble. Alors que l'effet de lumière semble très agréable sur la version de bureau du jeu, il semble vraiment moche sur la version Android. Le gradient de lumière n'est pas lisse du tout, avec un effet de bande de couleur. Voici les captures d'écran du bureau et les versions Android: enter image description herelibGDX/Box2DLights Couleur Banding sur Android

Pour utiliser Box2DLights dans mon jeu, j'utilise ce code dans mon GameScreen:

RayHandler.useDiffuseLight(true); 
rayHandler = new RayHandler(world); 
rayHandler.resizeFBO(Gdx.graphics.getWidth()/5, Gdx.graphics.getHeight()/5); 
rayHandler.setBlur(true); 
rayHandler.setAmbientLight(new Color(0.15f, 0.15f, 0.15f, 0.1f)); 

J'ai aussi essayé de jouer avec des paramètres différents, tels que:

rayHandler.diffuseBlendFunc.set(GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); 

Ou

rayHandler.shadowBlendFunc.set(GL20.GL_DST_COLOR, GL20.GL_SRC_COLOR); 

Ou

Gdx.gl.glEnable(GL20.GL_DITHER); 

Je ne sais pas ce qui aide, mais voici d'autres precisions:

  • Mon tileset a été fait sur Photoshop et enregistré en tant que fichier PNG avec le mode RVB, 8 bits/canal
  • Cet effet a été observé sur mes 2 appareils Android qui sont:
    • Tablet Transformer Prime TF701 avec Android 4.2.1
    • LG G avec Android Stylo 5.0.2

Merci pour votre aide!

Répondre

0

Voici la solution:

Le problème était lié à une faible profondeur de bits sur Android. Si vous regardez le code de AndroidApplicationConfiguration.java, vous remarquerez sur les lignes 30 et 31 ce code:

/** number of bits per color channel **/ 
public int r = 5, g = 6, b = 5, a = 0; 

Ainsi, les applications Android avec libGDX render, par défaut, les images binaires faibles. Cela peut être facilement modifié dans le AndroidLauncher.java de votre application.

La valeur par défaut AndroidLauncher.java de votre application ressemble à ceci:

public class AndroidLauncher extends AndroidApplication { 
    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
     initialize(new MyGdxGame(), config); 
    } 
} 

Tout ce que vous avez à faire, d'avoir un format de rendre RGBA8888 pour votre application Android est:

public class AndroidLauncher extends AndroidApplication { 
    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
     config.r = 8; 
     config.g = 8; 
     config.b = 8; 
     config.a = 8; 
     initialize(new MyGdxGame(), config); 
    } 
} 

Et voilà! Voici une capture d'écran d'Android comparative RGB565 VS Android RGBA8888 VS Desktop: enter image description here

Vous pouvez voir que l'Android RGBA8888 est très proche de la version de bureau.