2012-08-11 75 views
0

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

我想我现在所拥有的两个主要问题:

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

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

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

+2

场景仅仅是在节点层次中最顶层节点。除了这个要求,它也可以是一个CCNode。同样,如果您不需要内置的触摸支持,则可以使用CCScene而不是CCLayer。 – LearnCocos2D 2012-08-11 10:04:14

回答

0

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

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)];