何时使用CCScene vs CCLayer?

时间:2012-08-11 04:54:40

标签: menu cocos2d-iphone cclayer ccmenuitem

我是一个UI buff - 我的游戏中的每个“屏幕”都应该在它出现或消失时进入/退出。因为我的游戏在资源方面很简单,我想我只是让每个“屏幕”成为CCLayer并为转换定义一个函数,将所有内容留在内存中。事实证明这比我预期的要复杂得多。

我认为我现在有两个主要问题:

1)每个“屏幕”都是CCLayer。这看起来很好,但我似乎无法停止接收触摸事件,即使它们处于非活动状态。子sprite似乎不尊重isTouchEnabled属性,所以我一直都在看不可见的按钮。

2)我写了一个自定义按钮类,它基本上是一个带有几个单独纹理状态的精灵。它使用CCTargetedTouchDelegate协议。我认为这是上述问题的重要组成部分。

我对CCMenu的东西不是很清楚。是否有教程或文档可以更好地解释其设计目的以及如何使用它? cocos2d的文档根本没有讨论每个类的功能,这使得正确使用库变得更加困难。另外,我何时应该使用场景而不是图层?我可以编写自定义转换吗?

2 个答案:

答案 0 :(得分:0)

我发现如果你在菜单的单个场景中有多个图层,例如主菜单(比较整个场景更容易有加载游戏,新游戏等等),如果添加全部你按钮作为图层的孩子;然后阻止他们接收触摸,只需在不使用时将图层移离屏幕。这是一个例子。

[loadLayer setPosition:CGPointMake(-1000,-1000)];
[settingsLayer setPosition:CGPointMake(-1000,-1000)];
[menuLayer setPosition:CGPointMake(0,0)];

每次你选择一个按钮,你可以说加载游戏图层只是反转右边的图层。

[loadLayer setPosition:CGPointMake(0,0)];
[settingsLayer setPosition:CGPointMake(-1000,-1000)];
[menuLayer setPosition:CGPointMake(-1000,-1000)];

答案 1 :(得分:0)

将CCScenes用于菜单会更方便。非活动CCScene的所有子项都不会接收触摸事件,因此您不必管理该行为。 CCScenes也有像crossfade这样的内置转换,但如果你像我一样,你可能只想运行一个动作来使场景转换出来,然后调用CCDirector:replaceScene。