「cocos2d for iPhone レッスンノート」のサンプル「Asteroid」を参考に、ゲーム制作している件です。
前回、Kobold2dのテンプレートEmpty-ProjectをiPhoneのアプリ制作用に下準備しました。
今回は、「Asteroid」からGameScene.h/mを読み込んで、背景の表示まで復活させます。
まず、前回作ったプロジェクトへ「cocos2d for iPhone レッスンノート」のサンプル「Asteroid」のGameScene.h/.mをAdd Files toしました。
ついでに、読み込んだGameScene.h/.mを選択して右クリックメニューのNew Group from Selectionでフォルダを作り、名前をScene & Layersしておきます。作業効率を上げるチョットしたTipsですね。
次に、GameScene.h/.mの中身を消していきます。
1 2 3 4 5 6 7 8 9 10 |
#import <Foundation/Foundation.h> #import "cocos2d.h" @interface GameScene : CCScene { } //シングルトンオブジェクトを返すメソッド + (GameScene *)sharedInstance; @end |
こちらは、GameScene.h。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#import "GameScene.h" // // @interface GameScene () @end @implementation GameScene static GameScene *scene_ =nil; + (GameScene *)sharedInstance { if (scene_ == nil) { scene_ =[GameScene node]; } return scene_; } - (id)init { self =[super init]; if(self){ } return self; } @end |
こちらは、GameScene.m。もう、気持ち良いくらいバッサリ消しました。
次に、config.luaでFirstSceneClassNameをGameSceneにします。これについても通った道です。サクサク進みます。
この状態でRunしてみます。エラーは出ません!バッチリ真っ黒ですね。
まぁ、ここでエラーが出たら困りますが。。。
次に、背景を表示します。
まずは、iPhone3.5インチと4インチの違いを吸収する模様を出し分けます。これも過去に通った道ですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#import <Foundation/Foundation.h> #import "cocos2d.h" @interface GameScene : CCScene { } //シングルトンオブジェクトを返すメソッド + (GameScene *)sharedInstance; +(CGRect) screenRect; -(BOOL)is4Inch; @end |
GameScene.hに宣言を前のプロジェクトからコピペします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
static CGRect screenRect; static GameScene *scene_ =nil; + (GameScene *)sharedInstance { if (scene_ == nil) { scene_ =[GameScene node]; } return scene_; } - (id)init { self =[super init]; if(self){ CGSize screenSize = [[CCDirector sharedDirector] winSize]; if ([self is4Inch]) { screenRect = CGRectMake(0, 44, screenSize.width, screenSize.height-44); //迷彩柄を加える CCSprite *superBack =[CCSprite spriteWithFile:@"camoBack.png"]; superBack.anchorPoint =ccp(0, 0); superBack.position =ccp(0, 0); [self addChild:superBack z:1000];//一番⬆にしないと }else{ screenRect = CGRectMake(0, 0, screenSize.width, screenSize.height); } } return self; } +(CGRect) screenRect { return screenRect; } -(BOOL)is4Inch{//Retinaだったらtrue返す CGSize winSize=[[CCDirector sharedDirector] winSize]; return (winSize.width==320.0f && winSize.height==568.0f); } |
GameScene.mで出し分けの実装と、画面が4インチかの判定メソッドを前のプロジェクトからコピペしました。
あと、模様の入ったpng画像も前のプロジェクトからAdd Files toします。
次に、背景を追加します。背景画像にはスプライトシートを使いたかったので、前のプロジェクトのものをコピペしました。
前のプロジェクトからbackground.h/mをAdd Files toします。あと、前のプロジェクトで背景画像用に作ったスプライトシートもAdd Files toします。
1 |
#import "background.h" |
GameScene.mにbackground.hをインポートして、、、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
- (id)init { self =[super init]; if(self){ // Enable pre multiplied alpha for PVR textures to avoid artifacts [CCTexture2D PVRImagesHavePremultipliedAlpha:YES]; // Load all of the game's artwork up front. CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache]; [frameCache addSpriteFramesWithFile:@"md.plist"]; CCSpriteFrameCache* backgroundCache = [CCSpriteFrameCache sharedSpriteFrameCache]; [backgroundCache addSpriteFramesWithFile:@"back_md.plist"]; CGSize screenSize = [[CCDirector sharedDirector] winSize]; if ([self is4Inch]) { screenRect = CGRectMake(0, 44, screenSize.width, screenSize.height-44); //迷彩柄を加える CCSprite *superBack =[CCSprite spriteWithFile:@"camoBack.png"]; superBack.anchorPoint =ccp(0, 0); superBack.position =ccp(0, 0); [self addChild:superBack z:1000];//一番⬆にしないと }else{ screenRect = CGRectMake(0, 0, screenSize.width, screenSize.height); } background* bg = [background node]; if([self is4Inch]){//iPhone5出し分け bg.position =ccp(0, 44); }else{ bg.position =ccp(0, 0); } [self addChild:bg z:-1]; } return self; } |
initメソッドでbackgroundを配置します。
ここまででRunしてみて、ちゃんと表示されてホッとしました。
ちなみに、iOSシミュレーターを4インチにするのは、iOSシミュレーターを開いた状態のデスクトップメニューでハードウェア>デバイスから「iPhone (Retina-4inch)」を選べばOKですが、RetinaじゃないMacBookProで見ると画面が巨大過ぎです。
デスクトップメニューのウィンドウ>表示サイズで50%を選ぶと、3インチの画面と比べやすくなります。
背景は問題無し。次は、敵キャラを表示して動かすところまで復活します。