我希望能够将我的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的陷阱。为了避免纹理生成开销,我想将它们导出为图像,而是直接从纹理图集中加载这些纹理。
答案 0 :(得分:1)
无论如何都没有为导出的纹理实现透明背景。
根据这个SO问题SKScene cannot be transparent,可能的原因是SpriteKit使用的帧缓冲由于性能原因而不允许这种透明度。