2

iOS ゲーム (png ファイルと plist ファイル) からいくつかの画像リソースを取得しました。リソースは、テクスチャ パッカーによってパックされます。.png & .plist ファイルを png 画像に復元したいのですが、これを行う方法がわかりません。 入手したリソース

4

1 に答える 1

1

cocos2d少し前にそれを達成するためだけに小さなプロジェクトを書きました。基本的に を使用CCSpriteFrameCacheして plist 情報をロードし、それぞれspriteFrameを反復処理して、目的のアトラスの部分を で「カット」しCCRenderTextureます。主なロジックは次のようになります。

-(id) init
{
    // always call "super" init
    // Apple recommends to re-assign "self" with the "super" return value
    if( (self=[super init])) {

        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:PLIST_FILE];

        NSDictionary *frames = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrames];

        for(id key in frames) {
            //NSLog(@"key=%@ value=%@", key, [frames objectForKey:key]);
            [self saveSpriteToFile:key inFolder:FOLDER_PATH];
        }

    }
    return self;
}

-(void) saveSpriteToFile:(NSString *)name inFolder:(NSString *) folder {
    CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:name];
    CGSize spriteSize = [sprite contentSize];
    float scale = 1;
    int nWidth = spriteSize.width;
    int nHeight = spriteSize.height;
    nWidth *= scale;
    nHeight *= scale;
    [sprite setPosition:ccp(spriteSize.width / 2, spriteSize.height / 2)];
    [sprite setScale:scale];
    [self addChild:sprite];

    CCRenderTexture* render = [CCRenderTexture renderTextureWithWidth:sprite.contentSize.width height:sprite.contentSize.height];
    [render begin];
    [sprite visit];
    [render end];
    //NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    //NSString *documentsDirectory = [paths objectAtIndex:0];
    [render saveToFile:[NSString stringWithFormat:@"%@/%@", folder, name] format:kCCImageFormatPNG];

    [self removeChild:sprite cleanup:YES];
}

他の誰かが役に立つと思った場合に備えて、プロジェクト全体を github にアップロードしました.-

https://github.com/zuinqstudio/atlasSplitter

それが役に立てば幸い。

于 2013-08-19T17:11:29.223 に答える