SKTexure To UIImage,即 SpriteKit 截屏

SKTexure To UIImage,即 SpriteKit 截屏

问题来源

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

  1. 完成游戏关卡后,分享到社交网络
  2. 自制关卡编辑器,并需要批量生成在选关界面显示关卡预览图

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

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,显然还是需要继续使用老办法一段时间,毕竟用户的系统版本不归我们管。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值