您的位置:首页 > 产品设计 > UI/UE

SKTexure To UIImage,即 SpriteKit 截屏

2015-06-18 17:04 357 查看

SKTexure To UIImage,即 SpriteKit 截屏

问题来源

我们使用 SpriteKit 做游戏的时候,至少有两种时候需要写程序截屏:


完成游戏关卡后,分享到社交网络

***关卡编辑器,并需要批量生成在选关界面显示关卡预览图


这个时候我们的第一反应差不多会是

SKView *skView = self.view;
SKTexutre *tex = [skView textureFromNode:skView.scene];

然而你会发现在 iOS 9 和 OS X 10.11 到来之前,这个东西并没有什么卵用,因为你踏破铁鞋也找不到能把 SKTexture 转成 UIImage/NSImage/CGImage 的方法,即使你发现 XCode 6 Debug 的时候,设置断点可以预览 SKTexture。(这个时候确实挺想逆向一下看看 XCode 是怎么做到的,可惜不会。。。ORZ)


问题解决

目前亲测可用的唯一方法,还只能用在 iOS 上,如下:

- (UIImage*) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);

    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return img;
}

然后

UIImage *img = [self imageWithView:self.skView];

如果想在 OS X 上用这个方法,抱歉不行,因为 上述方法
drawViewHierarchyInRect
只在 UIIVew 中有效,NSView 没有这个方法。如果一定要在 OS X 上截图,可能需要考虑使用 OS X 截屏方面的 API 了。

好消息是,iOS 9 和 OS X 10.11 的 SDK 里面,SKTexture 已经自带一个 CGImage 属性,***关卡编辑器需要在 OS X 上截图的同学,看来需要尽快升级到 OS X 10.11 了。至于 iOS,显然还是需要继续使用老办法一段时间,毕竟用户的系统版本不归我们管。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: