我正在使用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);
我似乎无法弄清楚为什么会崩溃,我会感激任何帮助
答案 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
,你已经出界了。