(Libgdx 1.6.1)由于索引超出范围,BitmapFontCache.draw崩溃

时间:2015-06-03 10:53:02

标签: java libgdx lwjgl glyph

我刚刚将我的Libgdx项目从1.4.x更新为1.6.1。我在我的游戏中使用BitmapFontCache进行对话,使用BitmapFontCache.draw(开始,结束)按字符绘制字符串字符。这在1.4.x中工作正常,但在进行必要的更改以获得1.6.1构建后,在显示最后一个字符后启用换行时,似乎会导致崩溃。奇怪的是,这似乎不是一个线串的问题。

以下是我添加文字的方式:

fontCache.addText( message, fontPosX, fontPosY, fontWidth, Align.left, true);

然后我增加字符数并绘制。 currentCharacter在根据字符串长度到达字符串末尾时停止:

fontCache.draw( batch, 0, currentCharacter );

这在1.4.x中运行良好,即使使用多行换行包但如果行换行到第二行(在绘制最后一个字符后崩溃),似乎会导致超出范围异常。这是导致SpriteBatch崩溃的行。

System.arraycopy(spriteVertices, offset, vertices, idx, copyCount);

我需要一种新的方法来计算绘图的字符串长度吗?我是否需要以某种方式使用返回GlyphLayout?或者这可能是一个错误?

1 个答案:

答案 0 :(得分:2)

好的,我知道问题出在哪里,我很确定它是libgdx中的一个错误。

我也有一个解决方法,虽然它有点hacky。

问题GlyphLayout在空格字符上包裹一行时,它会优化终止空间。因此,删除空格后,布局中的字形总数现在小于字符串中的字符数。包裹在空格字符上的线越多,两者之间的差异就越大。

解决方法 因此,为了计算出用于渲染全文的长度,我们需要计算GlyphLayout中的字形数而不是字符串中的字符数。这里有一些代码可以做到......

private int calcLength(GlyphLayout glyphLayout) {

    int length = 0;
    for(GlyphLayout.GlyphRun run : glyphLayout.runs) {
        length += run.glyphs.size;
    }
    return length;
}

传入的GlyphLayout将是BitmapFontCache.addText()方法返回的 case R.id.delete_confirm: Object tag = v.getTag();

相关问题