iphone z命令中的cocos2d

时间:2009-10-25 08:29:48

标签: iphone cocos2d-iphone

我正在制作一个图层中有许多精灵的游戏,一旦你触摸精灵,它就会有所作为。

我的问题是z顺序问题,我的大多数精灵都是重叠的,当你触摸重叠的精灵时,后面的那个(我认为最低的z顺序)反应而不是前面的那个。

我需要了解更多关于cocos2d的z顺序。

如何在运行时更改z顺序?

谢谢!

3 个答案:

答案 0 :(得分:5)

Z Order和触摸处理系统是分开的。 Z Order仅适用于图层的 visual 布局。但是,触摸处理系统依赖于向触摸调度程序注册时指定的优先级。如果您使用具有相同优先级的触摸调度程序注册两个图层,则无论图层的Z顺序如何,第二个图层都将首先获得触摸。

当我遇到同样的问题时,这部分让我很困惑。而Z Order在视觉上将更高的数字放在彼此之上,而与触摸完全相反。较低的优先级数字实际上首先获得了触摸。为了保持自己的理智,我重构了我的代码,以便尽可能地以与Z索引相同的顺序添加图层,因此顶层的触摸将表现得很直观。

当这是不可能的时候,我使用触摸优先系统,并且我定义了常量,以便我以后不会感到困惑。要使用优先级系统注册触摸,请使用以下命令:

-(void) registerWithTouchDispatcher {
[[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: DEFAULT_TOUCH_PRIORITY swallowsTouches:YES];

}

答案 1 :(得分:2)

您是否使用0.8中添加的Touch Dispatcher?

  

按照v0.7.x(标准)或一次触摸(目标)调度触摸的单例。使用定向触摸的好处是您只接收所声称的触摸事件(开始,移动,结束,取消)。使用目标触摸简化了多点触控和单点触控游戏中的触控处理代码。除非您需要复杂的触摸处理代码,否则建议使用目标触摸。

     

新TouchDispatcher的另一个好处是它具有优先级队列,因此您可以改变触摸消费者的位置。

您可以使用优先级队列来完成您想要的任务。你可以在每个Sprite上设置优先级,这样你就可以定义哪些精灵应该首先响应一个触摸,以及他们是否应该通过触摸或吞下它,所以在它处理之后没有别的东西会得到触摸事件。

cocos2d项目中的Touches Test示例可能是最好看的地方:http://code.google.com/p/cocos2d-iphone/source/browse/trunk/tests/TouchesTest(尤其是Paddle.m类)

在sprite类的onEnter方法中,您可以设置触摸调度程序的优先级:

- (void)onEnter
{
    [[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    [super onEnter];
}

优先级较高的代表将在低优先级代理之前做出响应。

答案 2 :(得分:0)

将其视为纸层。 1将位于0之上.0位于-5之上。 16是14以上。那就是,无论你选择使用负数还是正数,更高的数字都在较低的数字之上。