在Android Andengine中加载数组中的多个纹理

时间:2014-03-02 18:05:40

标签: android arrays textures loading andengine

我正在使用for循环来实现Sprite对象的加载和处理,以便为hangman游戏的键盘显示。循环使其进入第4次迭代并崩溃。它给我的错误说:

Texture must not exceed the bounds of the atlas

这实际上应该可以工作,因为所有图像都是64x64,并且图册被声明为:

this.mAtlas[i] = new BitmapTextureAtlas(this.getTextureManager(),256, 256,TextureOptions.BILINEAR);

我正在使用一系列地图集和一系列纹理来加载图像,我加载了图集。之后,我将纹理传递给实现精灵的自定义类。最后我将加载的精灵附加到场景中。这是循环的完整代码:

for(int i = 0; i < 28; i++)
{
    String name = Integer.toString(i);
    name+= ".png";
    this.mAtlas[i] = new BitmapTextureAtlas(this.getTextureManager(),256, 256,TextureOptions.BILINEAR);
    this.mTexture[i] = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAtlas[i], this, name, (i*64) + 5,0);
    this.mAtlas[i].load();
    if(i % 13 == 0)
    {               
        yPos -= 64;
    }
    if(i < 26)
    {
        letterPass = alphabet.substring(i);
    }
    else if(i == 26)
    {
        letterPass = "BackSpace";
    }
    else if(i == 27)
    {
        letterPass = "return";
    }
    letters[i] = new Letter((i * 64)+ 5.0f, yPos, this.mTexture[i].getHeight(), this.mTexture[i].getHeight(), this.mTexture[i], this.mEngine.getVertexBufferObjectManager());
    letters[i].setLetter(letterPass);
    mScene.attachChild(letters[i]);     
}

发生崩溃的行是:

this.mTexture[i] = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAtlas[i], this, name, (i*64) + 5,0);

我似乎无法弄清楚为什么会崩溃,我会感激任何帮助

1 个答案:

答案 0 :(得分:1)

纹理图集的大小为256x256像素。你的精灵是64x64像素,你为每个精灵创建一个地图集...这意味着你浪费了很多空间。它甚至不起作用,因为在这一行:

    this.mTexture[i] = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAtlas[i], this, name, (i*64) + 5,0);

您将纹理放置在位置[i * 64 + 5, 0]的地图集上。我打赌它在4号纹理上失败了。 3 * 64 + 5 +64 = 261,你已经出界了。