【问题标题】:How to kill a cocos2d scene directly without replacing scene如何在不替换场景的情况下直接杀死一个cocos2d场景
【发布时间】:2013-04-25 21:11:00
【问题描述】:

我以这种方式使用 UIViewController 开始游戏:

navController = [[MyNavigationController alloc] initWithRootViewController:myController];

当你按下游戏按钮时,游戏会以这种方式开始场景:

[[CCDirector sharedDirector] runWithScene:gameScene];

好的,现在当我想退出时,我只需用起始视图控制器替换 UIViewController(因为我用 UIKit 做菜单,用 cocos2d 做游戏)来做我想要的动画,它工作正常......但显然旧的运行场景仍然保留在内存中,它没有以任何方式释放,我需要删除场景并让应用程序像第一次运行时一样。

replaceScene 不起作用,我只需要停止正在运行的场景并让应用程序开始运行时的所有内容,直接从 [CCDirector sharedDirector],我该怎么做? popScene 也不行。

【问题讨论】:

  • 加载一个空场景并调用导演的stopAnimation
  • 我无法加载空场景,我需要在当前场景和 UIViewController 之间切换(正在工作),我尝试停止动画并调用 [[CCDirector sharedDirector] end] ;场景结束了,但是当我调用另一个游戏场景时没有任何反应
  • 你必须调用 startAnimation。你的uiviewcontroller不是全屏的吗?

标签: objective-c cocos2d-iphone scene


【解决方案1】:

您可以从应用程序中删除 CCDirector。

director 是一个简单的 UIViewController 所以,你可以调用

[[CCDirector sharedDirector] removeFromParentViewController];

然后调用[[CCDirector sharedDirector] end]; 删除单例实例

【讨论】:

  • 我有一些游戏,而不仅仅是一个,当我退出一个游戏时,我会在 UIViewController 和场景之间切换场景,如果按照你说的做,当我开始另一个游戏时,我收到“Do not initialize the TextureCache before Director”崩溃消息
  • 好的,在调用Director的“end”方法之前尝试释放TextureCache... [CCTextureCache purgeSharedTextureCache];
  • 似乎没什么用,我有一个更简单的问题,如果你有 2 个游戏的 2 个场景,你会在 appDelegate 中从哪个开始?以及之后你应该如何更换它们?无论我做什么似乎都是错误的,如果我放一个场景,让我们在 appDelegate 中说“游戏 1 场景”,然后我按下“游戏 1 按钮”,它就会正确显示。但是,如果我将“游戏 1 场景”放在 appDelegate 中并按下“游戏 2 按钮”,我会得到 -OpenGL 错误 0x050- 然后场景开始(带有“损坏”动画)。我尝试了一个“介绍场景”,但结果是我总是出错并且交换动画很糟糕
  • 为什么不为所有游戏使用同一个 cocos 实例,只需要更改场景,游戏 1 的场景 1 和游戏 2 的场景 2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多