2017-10-15 95 views
0

我正在使用libGDX实现一个关卡选择页面(如愤怒的小鸟)。我有这样的辅助函数来绘制页面指示符(点表示当前页):libGDX形状渲染器未按下后退按钮

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(); 
} 

然后在绘制函数,我有:

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) 

} 

它按预期工作。但每次我点击后退按钮(主页的哪个出口),然后回到级别选择屏幕,点就消失了。

+0

用'Texture'和'SpriteBatch'代替'shapeRenderer'工作更好# – Aryan

回答

-1

的问题是,您所呼叫batch.end()batch.begin()逆转,这可能会影响离开这个页面批次继续()开始离开它启用了一批并保持屏幕黑暗。

+0

不,你需要结束批渲染器(用于纹理渲染)并开始形状渲染器(用于形状) – OMGPOP