LoginSignup
14
13

More than 5 years have passed since last update.

CocoaPods管理のcocos2dを使ってアプリケーションを作成する

Posted at

最近cocos2d-iphoneを触り始めました。
開発するiOSアプリケーションへライブラリを組み込みたい時にいろいろな手間をはぶけるCocoaPods、使っていますか?
ひとつひとつファイルをダウンロードしてきてプロジェクトに追加なんて面倒くさくてやっていられないですよね。

cocos2dをインストールするとXcodeにプロジェクトテンプレートが追加されます。
普通はプロジェクト作成時にこのテンプレートを選択することになると思いますが、cocos2dのファイル群が自分の書いたソースファイルと同列にあるのが気持ち悪い。
cocos2dもCocoaPodsで管理するようにしましょう。

cocos2dはCocoaPodsに登録されているので、他のライブラリと同じようにPodfileへ以下のように書けばプロジェクトに追加することができます。

pod 'cocos2d'

やってみましょう。

まず、プロジェクトを作成するときには、Empty Application を選択します。
必要な情報を入力してプロジェクトを作成しましょう。
プロジェクトを作成したら、プロジェクトのディレクトリにPodfileを作成します。
Podfile には上にも書いた、pod 'cocos2d'を記述します。
もちろん、他のライブラリを追加してもOKです。

編集を終えたら、pod installを実行します。
この記事ではcocoapodsの使い方は説明しません。
cocoapodsもインストールされているものとして話を進めます。
生成された hogehoge.xcworkspace を開くと、Podsプロジェクトにcocos2dのファイル郡が追加されています。

cocos2dのテンプレートをつかってプロジェクトを作成したときと違って、AppDelegateにはcocos2d関連の処理が書かれていません。
当然ですね。
なので、cocos2dのテンプレートを使った時に生成されるファイルを参考に、以下のようにAppDelegateのファイルを編集します。

CCAppDelegate.h
#import <UIKit/UIKit.h>
#import <cocos2d.h>

@interface CCAppDelegate : UIResponder <UIApplicationDelegate, CCDirectorDelegate>

@property (strong, nonatomic) UIWindow *window;

@end
CCAppDelegate.m
#import "CCAppDelegate.h"

@interface CCAppDelegate ()

@property (weak, nonatomic) CCDirectorIOS *director;
@property (strong, nonatomic) UINavigationController *rootViewController;

@end

@implementation CCAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    CCGLView *glView = [CCGLView viewWithFrame:self.window.bounds
                                   pixelFormat:kEAGLColorFormatRGB565
                                   depthFormat:0
                            preserveBackbuffer:NO
                                    sharegroup:nil
                                 multiSampling:NO
                               numberOfSamples:0];

    self.director = (CCDirectorIOS *)[CCDirector sharedDirector];
    self.director.wantsFullScreenLayout = YES;
    self.director.displayStats = NO;
    self.director.animationInterval = 1.0/60;
    self.director.view = glView;
    self.director.delegate = self;
    self.director.projection = kCCDirectorProjection2D;

    [self.director enableRetinaDisplay:YES];

    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

    CCFileUtils *fileUtils = [CCFileUtils sharedFileUtils];
    [fileUtils setEnableFallbackSuffixes:NO];
    [fileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];
    [fileUtils setiPadSuffix:@"-ipad"];
    [fileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"];

    [CCTexture2D PVRImagesHavePremultipliedAlpha:YES];

    [self.director pushScene:[IntroLayer scene]];

    self.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.director];
    self.rootViewController.navigationBarHidden = YES;

    self.window.rootViewController = self.rootViewController;
    [self.window makeKeyAndVisible];

    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    if (self.rootViewController.visibleViewController == self.director) {
        [self.director pause];
    }
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    if (self.rootViewController.visibleViewController == self.director) {
        [self.director stopAnimation];
    }
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    if (self.rootViewController.visibleViewController == self.director) {
        [self.director startAnimation];
    }
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (self.rootViewController.visibleViewController == self.director) {
        [self.director resume];
    }
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    CC_DIRECTOR_END();
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    [self.director purgeCachedData];
}

- (void)applicationSignificantTimeChange:(UIApplication *)application
{
    self.director.nextDeltaTimeZero = YES;
}

@end

IntroLayerをpushSceneしているところは好きなLayerクラスに置き換えてください。
これでCocoaPodsで追加したcocos2dが使えるはずです。

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13