[求助]游戏内暂停

不好意思,新手初学。

我现在需要在win32平台下用cocos2d-x开发,现在想实现一个游戏内暂停,就是点击暂停按钮之后屏幕暗下弹出暂停界面,后面的一切动作和操作失效。

之前的实现方法是使用CCDirector::sharedirector()->pause(); 但是如果通过点击按钮实现了这行代码的话,所有动作立即暂停,我的包括屏幕变暗的动作也就被停止了,而且不知道为什么,使用这个pause()之后游戏响应变得特别卡,以至于我的恢复游戏按钮在点击时也没有动画效果,但是确实可以执行resume()。

用pause()还有一个问题,就是屏幕上的按钮全部有效,但是如果我误操作点击了其他切换场景的按钮,那么程序就会停止响应一切输入,跟死机一样。如果通过改写CCLayer实现键盘输入的话,通过键盘依然可以使得游戏resume(),resume()之后刚才误操作导致的场景切换将被执行。

这样效果非常差。

现在的实现方法是通过调用所有对象的pauseSchedulerAndActions(),但问题在于游戏当中有很多随机对象,这么写有点繁琐。我希望调用包含所有对象的CCLayer的pauseSchedulerAndActions()对象时,发现并没法停止通过addChild()添加到其内的对象。

现在就想请教给位,有没有办法能够通过一条或者很少几条命令就可以实现游戏暂停,但是浮在游戏界面前面的暂停界面依然可以执行动画?

先用一个CCRenderTexture保存当前界面,然后用一个半透明的CCLayerColor做遮罩,然后弹出一个带有resume的界面当做暂停界面PopPanel,这个界面需要实现一个按键接口,来销毁当前界面。最后使用一个pauseScene依次把renderTexture,colorLayer,popPanel添加到scene里去,最后使用CCDirector::sharedDirector()->pushScene(pauseScene)把这个场景显示到显示器中就行了

— Begin quote from ____

月神天 发表于 2012-5-11 10:55 url

先用一个CCRenderTexture保存当前界面,然后用一个半透明的CCLayerColor做遮罩,然后弹出一个带有resume的 …

— End quote

非常感谢,确实是个很好的办法。
只是还没弄懂究竟怎么用CCRenderTexture截屏。

renderTexture->begin();
this->visit();
renderTexture->end();

— Begin quote from ____

月神天 发表于 2012-5-11 13:55 url

renderTexture->begin();
this->visit();
renderTexture->end();

— End quote

已经解决了。非常感谢:)

— Begin quote from ____

qq200600 发表于 2012-7-16 09:32 url

你好 有关于CCRenderTexture的资料么 我新手

— End quote

我都是用百度和官方API

— Begin quote from ____

CxC 发表于 2012-7-16 17:03 url

像我做得一个box2d的游戏就是直接把写一个类继承CCLayer,用单例模式,每一关都用的同一个b2world,当需要 …

— End quote

很想知道如何暂停一个Layer

— Begin quote from ____

CxC 发表于 2012-7-17 13:05 url

CCLayer里有这样两个函数
pauseSchedulerAndActions()
resumeSchedulerAndActions()

— End quote

多谢!!!!!!!!!!!!!!!!!!