ios从atlas加载纹理不起作用

时间:2014-03-01 18:14:10

标签: ios sprite-kit sktexture sktextureatlas

我有一堆瓷砖,我正在尝试使用SKTexture和SKTextureAtlas将它们加载到内存中,但它无法正常工作。我使用以下代码加载它们:

NSString *atlasName = [NSString stringWithFormat:@"Tiles"];
SKTextureAtlas *tileAtlas = [SKTextureAtlas atlasNamed:atlasName];
NSInteger numberOfTiles = tileAtlas.textureNames.count;
backgroundTiles = [[NSMutableArray alloc] initWithCapacity:numberOfTiles];
for (int y = 0; y < 5; y++) {
    for (int x = 0; x < 9; x++) {
        int tileNumber = y*9 + x + 1;
        NSString *textureName = [NSString stringWithFormat:@"tile%d.png",tileNumber];
        SKSpriteNode *tileNode = [SKSpriteNode spriteNodeWithTexture:[tileAtlas textureNamed:textureName]];
        CGPoint position = CGPointMake((0.5 + x)*_tileSize - _levelWidth/2,(0.5 - y - 1)*_tileSize + _levelHeight/2);

        tileNode.position = position;
        tileNode.zPosition = -1.0f;
        tileNode.blendMode = SKBlendModeReplace;

        [(NSMutableArray *)backgroundTiles addObject:tileNode];
    }
}

然后我使用此代码将它们添加到我的场景中:

- (void)addBackgroundTiles
{
    for (SKNode *tileNode in [self backgroundTiles]) {
        [self addChild: tileNode];
    }
}

问题是它没有加载瓷砖的正确纹理或根本找不到纹理。 我最终得到的是(忽略蓝色圆圈):http://i.stack.imgur.com/g39BF.png

这是我的瓷砖地图集:http://snk.to/f-ctp5yhpz

编辑:我正在使用NameChanger(www.mrrsoftware.com/MRRSoftware/NameChanger.html)重命名我的所有磁贴,是不是那个弄乱我的png的程序?在我重新命名之后,我可以看到它们的顺序正确。

2 个答案:

答案 0 :(得分:0)

为什么双循环? 您是否将backgroundTiles数组保存为属性?

我最近发生了这种情况,唯一有效的修复方法是: [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"someTile.png"]]; textureWithImageNamed总是正确的。

所以试试:

SKSpriteNode *tileNode = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:textureName]];

答案 1 :(得分:0)

解决方案

编辑我的回答,指出解决方案在此答案的下方评论中。

事实证明,问题是由于Xcode在Xcode之外重命名图像文件之后没有重建地图集(可能是由于文件改变了OP提到的)。

通过清理和重建项目,所有纹理地图集再次构建,OPs代码开始工作。


原始答案

要仔细检查两件事:

  1. 您的.atlas是作为文件夹还是群组添加到项目中的?它必须是一个文件夹(Xcode中的蓝色图标,而不是黄色)。
  2. 将Tiles.atlas添加到项目后,还必须在Xcode设置中启用atlas生成。
  3. 请点击此处查看类似问题:How to create atlas for SpriteKit。我链接到Apple documentation on incorporating texture atlases into your projects,其中有关于启用图集生成的详细分步说明。