「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の中身を消していきます。
#import#import "cocos2d.h" @interface GameScene : CCScene { } //シングルトンオブジェクトを返すメソッド + (GameScene *)sharedInstance; @end
こちらは、GameScene.h。
#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インチの違いを吸収する模様を出し分けます。これも過去に通った道ですね。
#import <Foundation/Foundation.h>
#import "cocos2d.h"
@interface GameScene : CCScene {
}
//シングルトンオブジェクトを返すメソッド
+ (GameScene *)sharedInstance;
+(CGRect) screenRect;
-(BOOL)is4Inch;
@end
GameScene.hに宣言を前のプロジェクトからコピペします。
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します。
#import "background.h"
GameScene.mにbackground.hをインポートして、、、
- (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インチの画面と比べやすくなります。
背景は問題無し。次は、敵キャラを表示して動かすところまで復活します。