MENU
コンテンツ再構築中

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

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

INDEX

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

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

    img_sk_capture_01

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



    [code]
    – (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);
    }
    [/code]

  3. あとは実行したいタイミングで captureScreen を呼び出せば PNG データでアルバムにキャプチャ画像が保存されます。このサンプルでは、画面タッチでスクリーンキャプチャし、キャプチャした画像をアルバムに保存します。

    [code]
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self captureScreen];
    }
    [/code]

  4. 画面をタッチすれば画面をキャプチャします。アルバムにアクセスするとゲーム画面が保存されていることが確認できます。

    img_sk_capture_02

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

    MyScene.m
    [code]
    #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
    [/code]

まとめ

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

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

Please share it!
  • URLをコピーしました!
  • URLをコピーしました!
INDEX