1

我希望能够将我的 SKTexture 导出到外部图像文件。我已经能够使用以下代码实现这一点。然而,它有一个严重的缺陷,即即使视图不是不透明的并且所有背景颜色都设置为清除,也会忽略 alpha 通道。

- (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];
}

我可以对当前的解决方案进行任何更改以允许导出包含 alpha 值的图像吗?

是否有一些更明显的方法可以将纹理导出到图像?

意图:我正在导出的纹理当前是在 SKShapeNode 的游戏加载时生成的,以解决 SKShapeNode 的缺陷。为了避免纹理生成开销,我想将它们导出为图像,而是直接从纹理图集中加载这些纹理。

4

1 回答 1

1

似乎无论如何都无法为导出的纹理实现透明背景。

根据这个 SO question SKScene cannot be transparent,可能的原因是 SpriteKit 使用帧缓冲区,出于性能原因不允许这种透明度。

于 2014-05-20T00:48:09.387 回答