1

SKTexture を外部の画像ファイルにエクスポートできるようにしたいと考えています。次のコードを使用してこれを達成できました。ただし、ビューが不透明ではなく、すべての背景色がクリアに設定されている場合でも、アルファ チャネルが無視されるという重大な欠陥があります。

- (void)export:(CGRect)bounds texture:(SKTexture *)texture path:(NSString *)path{
    UIGraphicsBeginImageContextWithOptions(bounds.size, NO, [UIScreen mainScreen].scale);
    SKView *view = [[SKView alloc] initWithFrame:bounds];
    SKScene *scene = [SKScene sceneWithSize:CGSizeMake(bounds.size.width, bounds.size.height)];

    view.opaque = NO;
    view.backgroundColor = [UIColor clearColor];
    scene.backgroundColor = [UIColor clearColor];

    SKSpriteNode *node = [SKSpriteNode spriteNodeWithTexture:texture];
    node.position = CGPointMake(bounds.size.width/2, bounds.size.height/2);
    [scene addChild:node];
    [view presentScene:scene];
    [view drawViewHierarchyInRect:bounds afterScreenUpdates:YES];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [UIImagePNGRepresentation(snapshotImage) writeToFile:path atomically:YES];
}

アルファ値を含む画像をエクスポートできるようにするために、現在のソリューションに変更を加えることはできますか?

テクスチャを画像にエクスポートするためのより明確な方法はありますか?

意図:私がエクスポートしているテクスチャは、SKShapeNode の落とし穴を回避するために、SKShapeNode からのゲーム ロード時に現在生成されています。テクスチャ生成のオーバーヘッドを回避するために、それらを画像としてエクスポートし、代わりにこれらのテクスチャをテクスチャ アトラスから直接ロードしたいと考えています。

4

1 に答える 1

1

とにかく、エクスポートされたテクスチャの透明な背景を実現する方法はないようです。

this SO question SKScene cannot be transparentによると、SpriteKit がパフォーマンス上の理由からこの透過性を許可しないフレームバッファを使用している可能性があります。

于 2014-05-20T00:48:09.387 に答える