Ios SKTextureAtlas:不止一个地图册
当使用多个图集时,我有问题 例如,我有主菜单.atlas和game.atlas以及这些场景的图像。在主菜单场景出现之前,我为它准备了图集([SkTextureAtlasAtlasNamed:@“main_menu”]),所有工作都很好。但在我开始游戏并准备游戏图集([SkTextureAtlasAtlasNamed:@“game”])之后,在游戏中我只看到空节点(带红色交叉的矩形)。没有例外或警告-一切正常 当我将所有游戏资源移到main_menu.atlas并移除game.atlas时,一切都正常-我在游戏中看到精灵。但我想分离性能优化的地图集 我使用自己的助手进行SpriteKit纹理管理。它加载地图集并返回我需要的纹理。所以我有这些方法:Ios SKTextureAtlas:不止一个地图册,ios,objective-c,sprite-kit,sktextureatlas,Ios,Objective C,Sprite Kit,Sktextureatlas,当使用多个图集时,我有问题 例如,我有主菜单.atlas和game.atlas以及这些场景的图像。在主菜单场景出现之前,我为它准备了图集([SkTextureAtlasAtlasNamed:@“main_menu”]),所有工作都很好。但在我开始游戏并准备游戏图集([SkTextureAtlasAtlasNamed:@“game”])之后,在游戏中我只看到空节点(带红色交叉的矩形)。没有例外或警告-一切正常 当我将所有游戏资源移到main_menu.atlas并移除game.atlas时,一切都
- (void) loadTexturesWithName:(NSString*)name {
name = [[self currentDeviceString] stringByAppendingString:[NSString stringWithFormat:@"_%@", name]];
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:name];
[self.dictAtlases setObject:atlas forKey:name];
}
- (SKTexture *) textureWithName:(NSString*)string {
string = [string stringByAppendingString:@".png"];
SKTexture *texture;
SKTextureAtlas *atlas;
for (NSString *key in self.dictAtlases) {
atlas = [self.dictAtlases objectForKey:key];
texture = [atlas textureNamed:string];
if(texture) {
return texture;
}
}
return nil; // never returns "nil" in my cases
}
“干净”没有帮助。
我做错了什么?
提前感谢。让我先说一句:你绝对可以使用2+纹理地图集:) 现在发布: 您首先加载菜单图集(首先在dict中),然后加载游戏图集。当你抓取菜单纹理时,一切都很好。 当你们出去抓取游戏纹理时,你们首先会在菜单atlas中查看(没有可用的图像,所以atlas会返回在这个菜单中定义的占位符纹理,而不是你们所期望的零) 此代码应按需要工作
- (SKTexture *) textureWithName:(NSString*)string {
string = [string stringByAppendingString:@".png"];
SKTexture *texture;
SKTextureAtlas *atlas;
for (NSString *key in self.dictAtlases) {
atlas = [self.dictAtlases objectForKey:key];
if([[atlas textureNames] containsObject:string]){
texture = [atlas textureNamed:string];
return texture;
}
}
return nil;
}
另外,它在不添加.png:)的情况下也可以正常工作。我很确定您只能有一个纹理图集,对于sprite工具包,这通常是动态创建的:谢谢。但例如,如果我有两个精灵,它们应该出现在一个场景中,但第一个精灵存储在~iphone.1.png中,第二个精灵存储在~iphone.2.png(另一个精灵表)中,那么这两个精灵表都必须在内存中,并且绘制调用计数会增加吗?我认为如果两个精灵都在一个精灵表中会更好,但是你的链接提供的方法并不能保证这一点。我认为你没有任何选择-它会找到没有问题的精灵。实现这一点的方法是,按照链接中的概述,将所有单个精灵放入项目中,并让SpriteKit构建atlas。就我所知,Sprite套件不是为与预先提供的atlas一起使用而设计的。如果你需要这个,你可能想看看Cocos2d或OpenGLES解决方案。