前の章では、Sprite Kitによる開発の雰囲気をつかむため、Xcodeに用意されているSpriteKit Game
テンプレートからプロジェクトを作成し、動作させました。
しかし、このテンプレートはStoryboardsの使用が前提1であり、そうでない場合はファイルを削除する等の手間がかかります。
そこで、この章ではEmpty Application
テンプレートをベースに、一からSprite Kitのプロジェクトを作ってみます。
少し面倒に感じるかもしれませんが、自分でプロジェクトをセットアップすることで、理解にも繋がるでしょう。
なお、本チュートリアルでは、特にStoryboardsの機能を使わないため、次章以降もこちらの方法を用います。
まず、Empty Application
を選択して、プロジェクトを作成します。なお、プロジェクト名はSJScratch
にしています。
この状態で実行すると、真っ白の画面が表示されます。
また、
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 phasesのLink Binary With LibrariesからSpriteKit.framework
を追加します。
Sprite Kitの機能を利用する際は、
#import <SpriteKit/SpriteKit.h>
のようにインポートするのを忘れないようにしましょう。
UIViewControllerのサブクラスである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
AppDelegateでは、先ほど作成したSJViewControllerのインスタンスをUIWindowのrootViewController
として設定して、アプリ起動時に表示させます。
- (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を用いたプロジェクトを作成することができます。