【问题标题】:iPhone - Unloading a cocos2d game that is running inside a View ControlleriPhone - 卸载在视图控制器中运行的 cocos2d 游戏
【发布时间】:2010-08-05 19:26:45
【问题描述】:

这就是交易,我一直在制作基于开源 tweeJump 的游戏,作为大型应用程序的一小部分。

我已成功加载游戏(从 tableView 加载)并且能够玩它,但我不太确定如何停止运行 cocos2d 并返回启动游戏的 table view。我尝试在 cocos2d 中实现一个停止 CCDirector 的按钮,但这基本上只是冻结了我的应用程序 - 我不太确定如何弹出视图控制器。我对 cocos2d 不是很熟悉,所以我将不胜感激。谢谢。

以下是一些相关代码:

appDelegate(它不会运行游戏,但会设置 CCDirector 供以后使用):

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

// Add the tab bar controller's current view as a subview of the window
[window addSubview:tabBarController.view];

[application setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES]; 

[[CCDirector sharedDirector] setPixelFormat:kRGBA8];
[[CCDirector sharedDirector] setAnimationInterval:1.0/kFPS];

[CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888]; 

[window makeKeyAndVisible];

return YES;
}

这是运行游戏的视图控制器(我从 tableViewController 加载)的相关实现,一切都在 loadView 中:

(void)loadView{
if (!load) {
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
load = YES;
[[CCDirector sharedDirector] attachInWindow:window];
[window makeKeyAndVisible];
CCScene *scene = [[CCScene node] addChild:[Game node] z:0];
[[CCDirector sharedDirector] runWithScene: scene];
}
}

【问题讨论】:

    标签: iphone cocos2d-iphone


    【解决方案1】:

    难道你不能让你的 TableView 成为一个单独的 cocos2d 场景的一部分,然后切换场景吗?

    这些是我的应用程序委托中切换场景的示例方法:

    - (void)loadGameOverScene {
        [_gameOverScene.layer.label setString:@"You Lose :["];
        [_gameOverScene.layer reset];
        [[CCDirector sharedDirector] replaceScene:_gameOverScene];
    }
    
    - (void)loadWinScene {
        [_gameOverScene.layer.label setString:@"You Win!"];
        [_gameOverScene.layer reset];
        [[CCDirector sharedDirector] replaceScene:_gameOverScene];
    }
    
    - (void)loadNewLevelScene {
        [_newLevelScene.layer reset];
        [[CCDirector sharedDirector] replaceScene:_newLevelScene];
    }
    
    - (void)nextLevel {
        [_mainScene.layer reset];
        [[CCDirector sharedDirector] replaceScene:_mainScene];
    }
    
    - (void)restartGame {
        _curLevelIndex = 0;
        [self nextLevel];
    }
    
    - (void)levelComplete {    
    
        _curLevelIndex++;
        if (_curLevelIndex >= [_levels count]) {
            _curLevelIndex = 0;
            [self loadWinScene];
        } else {
            [self loadNewLevelScene];
        }
    
    }
    

    另外,cocos2d 也有一个菜单系统:CCMenu 和 CCMenuItem。

    这里有一个关于如何使用不同类型菜单的教程:

    http://www.raywenderlich.com/414/how-to-create-buttons-in-cocos2d-simple-radio-and-toggle

    我喜欢 Ray 的教程。希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      我用它在 cocos2d 中打开 GameCenter 排行榜。

      GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] 
      
          init];
              if (leaderboardController != NULL)
              {
                  leaderboardController.leaderboardDelegate = self;
                  AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
      
                  [[app navController] presentModalViewController:leaderboardController animated:YES];
      
                  [leaderboardController release];
              }
      

      只需调用您的 viewController 代替 leaderboardController 即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 2011-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多