0

我是一个 UI 爱好者——我游戏中的每个“屏幕”都应该在它出现或消失时转换进/出。因为我的游戏在资源方面很简单,所以我想我只需让每个“屏幕”成为 CCLayer 并为转换定义一个函数,将所有内容留在内存中。结果比我预想的要复杂。

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

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

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

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

4

2 回答 2

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)];
于 2012-08-11T15:08:51.720 回答
0

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

于 2012-08-17T21:45:02.757 回答