2017-10-15 8 views
0

J'implémente une page de sélection de niveau (comme les oiseaux en colère) en utilisant libGDX. J'ai cette fonction d'assistance pour dessiner l'indicateur de page (points indiquant la page en cours):Le rendu de forme de libGDX ne dessine pas après avoir appuyé sur le bouton de retour

val shapeRenderer = ShapeRenderer() 
fun drawPageIndicator(batch: Batch?, page: Int, pageCount: Int, y: Float, centerX: Float, gap: Float, radius: Float) { 
    batch?.end(); 

    var fromX = centerX - pageCount/2 * gap; 
    if (pageCount % 2 == 0) { 
     fromX += gap/2; 
    } 

    shapeRenderer.projectionMatrix = batch?.projectionMatrix 
    shapeRenderer.begin(ShapeRenderer.ShapeType.Filled) 
    for (i in 0..pageCount-1) { 
     if (i == page) { 
      shapeRenderer.color = Color.WHITE 
     } else { 
      shapeRenderer.color = Color.GRAY 
     } 
     shapeRenderer.circle(fromX, y, radius) 
     fromX += gap; 
    } 
    shapeRenderer.end() 

    batch?.begin(); 
} 

Puis, dans la fonction de tirage au sort, je dois:

override fun draw(batch: Batch?, parentAlpha: Float) { 
    super.draw(batch, parentAlpha) 

    H.drawPageIndicator(batch, scroller.currentPage, scroller.pageCount, indicatorY, scroller.x + scroller.width/2, 16f, 4f) 

} 

Il fonctionne comme prévu. Mais chaque fois que j'appuie sur le bouton de retour (qui sort à la page d'accueil), puis que je reviens à l'écran de sélection de niveau, les points sont partis.

+0

Il est préférable de remplacer votre travail 'shapeRenderer' par' Texture' et 'SpriteBatch' – Aryan

Répondre

-1

Le problème est que vous appelez batch.end() et batch.begin() inversé, qui peuvent influencer de quitter cette page continuer avec le lot en begin() laisser activé pour le lot dessins et garder l'écran sombre.

+0

Non, vous devez terminer le rendu par lots (qui est pour le rendu de texture) et commencer le rendu de forme (pour les formes) – OMGPOP