1

メニューが左上隅に配置されている理由がわかりません。以前のバージョンでは、メニューは完全に中央に配置されていました。iPhone 4 でのテスト。

私は解決策を知っています[menu setPosition:ccp( size.width/2, size.height/2)];が、なぜそれが左上に配置されているのかを理解したいと思っていました.

同じ結果を得るには、AppDelegate でこれを試してください

[director_ pushScene: [HelloWorldLayer scene]]; 

それ以外の

[director_ pushScene: [IntroLayer scene]];

私の結果と私のコード

ここに画像の説明を入力

更新されたソース

MenuLayer.h

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

@interface MenuLayer : CCLayer {

}

+(CCScene *) scene;

@end

MenuLayer.m

#import "MenuLayer.h"


@implementation MenuLayer

        +(CCScene *) scene
        {
            CCScene *scene = [CCScene node];

            MenuLayer *layer = [MenuLayer node];

            [scene addChild: layer];

            return scene;
        }

    -(id) init
    {
        if( (self=[super init]) ) {
            CCMenuItem *itemAchievement = [CCMenuItemFont itemWithString:@"Play" block:^(id sender) {}];
            CCMenuItem *itemLeaderboard = [CCMenuItemFont itemWithString:@"Settings" block:^(id sender) {}];

            CCMenu *menu = [CCMenu menuWithItems:itemAchievement, itemLeaderboard, nil];

            [menu alignItemsVertically];

            [self addChild:menu];
        }
        return self;
    }
    @end

AppDelegate.m

    [director_ pushScene: [MenuLayer scene]];
4

3 に答える 3

1

OK、最初に答えをお話しします:

あなたは何かがおかしいです:)..あなたは親またはその祖父母の位置を変えたに違いありません...など。

編集:

エラーはCCDirectorこのメソッド内で実行されています:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ...
    // Remove this code ! 
    [director_ runWithScene:blah];
} 

CCDirector代わりに、次のように実行する必要があります。

// This method is part of the CCDirectorDelegate methods
// Add it below the - (BOOL)application: didFinishLaunchingWithOptions:
-(void) directorDidReshapeProjection:(CCDirector*)director
{
    if(director.runningScene == nil) {
        // Add the first scene to the stack. The director will draw it immediately into the framebuffer. (Animation is started automatically when the view is displayed.)
        // and add the scene to the stack. The director will run it when it automatically when the view is displayed.
        [director_ runWithScene: [HelloWorldLayer scene]];
    }
}

証拠:

cocos2dのドキュメントを読んでください!CCDirector彼らは、iOS 6より前のバージョンのiOSで実行している場合は、メソッド内で実行してはならないと言っていますapplication: didFinishLaunching:

ドキュメントから:

これは、iOS4とiOS5で、最初のシーンのサイズが正しいことを確認するために必要です。これはiOS6では必要なく、アプリケーションに追加できます:didFinish ...

これがあなたの写真です。

ここに画像の説明を入力してください

それは完全な混乱です...cocos2dのデフォルトの動作がそのような方法はありません。新しいcocos2dv2.xを作成し、クリーンアップするHelloWorldLayer.mと、結果は次のようになります。

// Achievement Menu Item using blocks
CCMenuItem *itemAchievement = [CCMenuItemFont itemWithString:@"Achievements" block:^(id sender) {}];
// Leaderboard Menu Item using blocks
CCMenuItem *itemLeaderboard = [CCMenuItemFont itemWithString:@"Leaderboard" block:^(id sender) {}];

CCMenu *menu = [CCMenu menuWithItems:itemAchievement, itemLeaderboard, nil];

[menu alignItemsVertically];

[self addChild:menu];

ここに画像の説明を入力してください

于 2012-09-15T19:38:16.700 に答える
0

MenuLayer.m を変更することで機能します - onEnter をオーバーライドしてから、子をそのレイヤーに追加します

#import "MenuLayer.h"


@implementation MenuLayer

+(CCScene *) scene
{
    CCScene *scene = [CCScene node];

    MenuLayer *layer = [MenuLayer node];

    [scene addChild: layer];

    return scene;
}
-(void) onEnter
{
    [super onEnter];
    CCMenuItem *itemAchievement = [CCMenuItemFont itemWithString:@"Play" block:^(id sender) {}];
    CCMenuItem *itemLeaderboard = [CCMenuItemFont itemWithString:@"Settings" block:^(id sender) {}];

    CCMenu *menu = [CCMenu menuWithItems:itemAchievement, itemLeaderboard, nil];

    [menu alignItemsVertically];

    [self addChild:menu];

}
-(id) init
{
    if( (self=[super init]) ) {

    }
    return self;
}
@end
于 2012-09-16T05:01:33.707 に答える