2

私はcocos2d v2.0をインストールしました.v1に対して何が変わったのかを見るために少し作業しています.単純なcocos2d + box2dプロジェクトを作成しました.それを実行するとすべて正常に動作します.IntroLayerとHelloworld レイヤー、単純な背景レイヤーを表示しようとしたので、これを行いました:

#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface BackgroundLayer : CCLayer

@end

#import "BackgroundLayer.h"

@implementation BackgroundLayer

-(id)init {

self = [super init];
if (self != nil) {

    CCSprite *backgroundImage = [CCSprite spriteWithFile:@"background.png"];
    CGSize screenSize = [[CCDirector sharedDirector] winSize];
    backgroundImage.position = ccp(screenSize.width/2, screenSize.height/2);
    [self addChild:backgroundImage z:0 tag:0];
}

return self;
}

@end

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "BackgroundLayer.h"

@interface GameScene : CCScene

@end

#import "GameScene.h"

@implementation GameScene

-(id)init {

self = [super init];
if (self != nil) {

    BackgroundLayer *backgroundLayer = [BackgroundLayer node];
    [self addChild:backgroundLayer z:0];
}

return self;
}

@end

そして、アプリデリゲートでこれを変更しました:

[director_ pushScene: [IntroLayer scene]];

これで:

[director_ pushScene: [GameScene node]];

しかし、0.5 のスケーリングされているように見えます。網膜ではなく網膜のために、hd イメージと非 hd イメージを作成しました。何が間違っていますか? これは結果です:

http://img706.imageshack.us/img706/4778/schermata072456124alle1.png

編集: このように BackgroundLayer.m を変更すると、すべて正常に動作します:

@implementation BackgroundLayer

/*-(id)init {

self = [super init];
if (self != nil) {

    CCSprite *backgroundImage = [CCSprite spriteWithFile:@"background.png"];
    CGSize screenSize = [[CCDirector sharedDirector] winSize];
    backgroundImage.position = ccp(screenSize.width/2, screenSize.height/2);
    [self addChild:backgroundImage z:0 tag:0];
}

return self;
}*/

-(void) onEnter
{
[super onEnter];
CCSprite *backgroundImage = [CCSprite spriteWithFile:@"background.png"];
CGSize screenSize = [[CCDirector sharedDirector] winSize];
backgroundImage.position = ccp(screenSize.width/2, screenSize.height/2);
[self addChild:backgroundImage z:0 tag:0];
}

@end

誰かが私に理由を説明できますか? 古いバージョンのcocos2dでは、initメソッドでレイヤーを追加できることを覚えています...

4

1 に答える 1

1

cocos2d 2.0 でも動作するこのスタイルを使用します。

@interface GameScene : CCLayer
{

}
+(CCScene *) scene;
@end

#import "GameScene.h"

@implementation GameScene

+(CCScene *) scene
{
    // 'scene' is an autorelease object.
    CCScene *scene = [CCScene node];

    // 'layer' is an autorelease object.
    GameScene *gameScenelayer = [GameScene node];

    // add layer as a child to scene
    [scene addChild: gameScenelayer];

    // return the scene 
    return scene;
}


-(id)init {

    self = [super init];
    if (self != nil) {

        CCSprite *backgroundImage = [CCSprite spriteWithFile:@"background.png"];
        CGSize screenSize = [[CCDirector sharedDirector] winSize];
        backgroundImage.position = ccp(screenSize.width/2, screenSize.height/2);
        [self addChild:backgroundImage z:0 tag:0];
    }

    return self;
}

@end

//これを呼び出す

[director_ pushScene: [GameScene scene]];
于 2012-07-15T17:27:47.950 に答える