Objective-C:Sprite Kit ゲーム画面(SKScene)をキャプチャしアルバムへ保存する

Sprite Kit で制作するゲームアプリで、ゲーム画面をキャプチャし、キャプチャした画像をアルバムに保存する方法をメモしておきます。

ゲーム画面(SKScene)をキャプチャしアルバムに保存する

  1. SpriteKit Game テンプレートを新規作成します。
    img_sk_capture_01

  2. キャプチャを実行したいシーン(MyScene.m)に、以下の captureScreen メソッドを記述します。

    - (void)captureScreen {
        CGRect rect = self.frame;
        UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale);
        [self.view drawViewHierarchyInRect:rect afterScreenUpdates:YES];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        // Store Image to Photo Album
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    }
  3. あとは実行したいタイミングで captureScreen を呼び出せば PNG データでアルバムにキャプチャ画像が保存されます。このサンプルでは、画面タッチでスクリーンキャプチャし、キャプチャした画像をアルバムに保存します。

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [self captureScreen];
    }
  4. 画面をタッチすれば画面をキャプチャします。アルバムにアクセスするとゲーム画面が保存されていることが確認できます。
    img_sk_capture_02

  5. MyScene.m は以下のようになります。

    MyScene.m
    #import "MyScene.h"
    
    @implementation MyScene
    
    -(id)initWithSize:(CGSize)size {    
        if (self = [super initWithSize:size]) {
            
            self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.20 alpha:1.0];
            
            SKLabelNode *myLabel = [SKLabelNode labelNodeWithFontNamed:@"HelveticaNeue-Bold"];
            myLabel.text = @"Hello, World!";
            myLabel.fontSize = 32;
            myLabel.position = CGPointMake(CGRectGetMidX(self.frame),
                                           CGRectGetMidY(self.frame));
            
            [self addChild:myLabel];
        }
        return self;
    }
    
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [self captureScreen];
    }
    
    - (void)captureScreen {
        CGRect rect = self.frame;
        UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale);
        [self.view drawViewHierarchyInRect:rect afterScreenUpdates:YES];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        // Store Image to Photo Album
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    }
    
    @end

まとめ

次回はキャプチャした画像を twitter で共有する方法を説明したいと思います。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents