从纹理图集中提取纹理选择

时间:2013-11-21 20:04:57

标签: objective-c sprite-kit

我正在尝试编写一种方法来执行上述操作。我的纹理图集包含超过500个纹理。当我将提取的纹理存储在一个新数组中并记录其描述时,数组包含我正确命名的3个纹理加上原始Atlas包含的所有纹理。其中的每一个都被称为“'MissingResource.png'(128 x 128)”。

我的问题是:我怎样才能在新阵列中存储我想要的3个纹理?这是代码:

-(void)createSelectedTexturesWith:(NSString*)ImageName;
{
 int bgCount = 1;

 NSMutableString *tempstring = [NSMutableString stringWithString:ImageName];
 SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"textures"];
 NSMutableArray *Leveltextures = [[NSMutableArray alloc]init];

 NSUInteger numImages = atlas.textureNames.count;

for (int i=1;i <= numImages; i++) {
    [tempstring appendFormat:@"_%02d.png",bgCount];
    NSString *textureName = [NSString stringWithString:tempstring];
    SKTexture *temp = [atlas textureNamed:textureName];
    [Leveltextures addObject:temp];
    [tempstring setString:ImageName];
    bgCount++;
}

NSLog(@"Leveltextures Content: %@",[Leveltextures description]);

}

2 个答案:

答案 0 :(得分:0)

不确定我明白你想要什么。但是,如果我理解正确,为什么你不能只检查textureName的前缀是否与你的imageName匹配,只在这种情况下创建纹理并添加到数组中?

答案 1 :(得分:0)

谢谢你的原型,为我做了这件事。虽然代码可能不太优雅,但在这里。也许它可以帮助别人。

-(void)createSelectedTexturesWith:(NSString*)ImageName;
{
    bgCount=1;

    NSMutableString *tempstring = [NSMutableString stringWithString:ImageName];
    SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"textures"];
    NSMutableArray *Leveltextures = [[NSMutableArray alloc]init];
    NSArray *atlasArray = [atlas textureNames];

    for (NSString *string in atlasArray) {

        if ([string hasPrefix:ImageName]){

        [tempstring appendFormat:@"%02d.png",bgCount];
        NSString *textureName = [NSString stringWithString:tempstring];
        SKTexture *temp = [atlas textureNamed:textureName];
        [Leveltextures addObject:temp];
        [tempstring setString:ImageName];
        bgCount++;
        }
    }

    NSLog(@"Leveltextures Content: %@",[Leveltextures description]);

}