さよならテンプレート

前の章では、Sprite Kitによる開発の雰囲気をつかむため、Xcodeに用意されているSpriteKit Gameテンプレートからプロジェクトを作成し、動作させました。 しかし、このテンプレートはStoryboardsの使用が前提1であり、そうでない場合はファイルを削除する等の手間がかかります。

そこで、この章ではEmpty Applicationテンプレートをベースに、一からSprite Kitのプロジェクトを作ってみます。 少し面倒に感じるかもしれませんが、自分でプロジェクトをセットアップすることで、理解にも繋がるでしょう。

なお、本チュートリアルでは、特にStoryboardsの機能を使わないため、次章以降もこちらの方法を用います。

プロジェクト作成

まず、Empty Applicationを選択して、プロジェクトを作成します。なお、プロジェクト名はSJScratchにしています。


Empty Application

この状態で実行すると、真っ白の画面が表示されます。


何もない画面

また、

Application windows are expected to have a root view controller at the end of application launch という警告も表示されます。

プロジェクト構成は、以下のようにかなりシンプルです。

SJScratch/
├── SJScratch
│   ├── Images.xcassets
│   │   ├── AppIcon.appiconset
│   │   │   └── Contents.json
│   │   └── LaunchImage.launchimage
│   │       └── Contents.json
│   ├── SJAppDelegate.h
│   ├── SJAppDelegate.m
│   ├── SJScratch-Info.plist
│   ├── SJScratch-Prefix.pch
│   ├── en.lproj
│   │   └── InfoPlist.strings
│   └── main.m
├── SJScratch.xcodeproj
│   ├── project.pbxproj
│   ├── project.xcworkspace
│   │   ├── contents.xcworkspacedata
│   │   └── xcuserdata
│   │       └── tnantoka.xcuserdatad
│   │           └── UserInterfaceState.xcuserstate
│   └── xcuserdata
│       └── tnantoka.xcuserdatad
│           └── xcschemes
│               ├── SJScratch.xcscheme
│               └── xcschememanagement.plist
└── SJScratchTests
    ├── SJScratchTests-Info.plist
    ├── SJScratchTests.m
    └── en.lproj
        └── InfoPlist.strings

フレームワークの追加

Build phasesLink Binary With LibrariesからSpriteKit.frameworkを追加します。


SpriteKit.framework

Sprite Kitの機能を利用する際は、

#import <SpriteKit/SpriteKit.h>

のようにインポートするのを忘れないようにしましょう。

View Controller

UIViewControllerのサブクラスであるSJViewControllerを作成します。


SJViewControllerを作成

- (void)loadView {
    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
    SKView *skView = [[SKView alloc] initWithFrame:applicationFrame];
    self.view = skView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
  // Do any additional setup after loading the view.
    
    SKView *skView = (SKView *)self.view;
    skView.showsDrawCount = YES;
    skView.showsNodeCount = YES;
    skView.showsFPS = YES;
    
    SKScene *scene = [SKScene sceneWithSize:self.view.bounds.size];
    [skView presentScene:scene];
}

loadViewをオーバーライドし、self.viewにSKViewのインスタンスを設定します。またviewDidLoadでは、描画数・ノード数・FPSの表示設定とシーンの作成・表示を行なっています。2

App Delegate

AppDelegateでは、先ほど作成したSJViewControllerのインスタンスをUIWindowrootViewControllerとして設定して、アプリ起動時に表示させます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    //self.window.backgroundColor = [UIColor whiteColor]; // 削除
    SJViewController *sjViewController = [[SJViewController alloc] init];
    _window.rootViewController = sjViewController;
    [self.window makeKeyAndVisible];
    return YES;
}

ここまでできたら実行してみましょう。

単色背景の上にFPSなどが表示されており、Sprite Kitで動いていることがわかります。 また、rootViewControllerを指定したため、冒頭の警告ログも表示されないようになっています。


Sprite Kitによる表示

このように、テンプレートに頼らなくてもほんの少しの手間で、Sprite Kitを用いたプロジェクトを作成することができます。

  1. Xcode 5では他のテンプレートも基本的にStoryboardsの使用が前提になっています。 

  2. ここではSKSceneを直接インスタンス化していますが、実際のゲーム開発では、画面に応じたサブクラスを作成するのが普通です。 


comments powered by Disqus