soo*_*oon 5 iphone cocos2d-iphone
我正在开发一个有多个精灵的游戏,一旦你触摸精灵,它就会做点什么.
我的问题是z顺序问题,我的大多数精灵都是重叠的,当你触摸重叠的精灵时,后面的那个(我认为最低的z顺序)反应而不是前面的那个.
我需要了解更多关于cocos2d的z顺序.
如何在运行时更改z顺序?
谢谢!
Z Order和触摸处理系统是分开的.Z Order仅适用于图层的可视布局.但是,触摸处理系统依赖于向触摸调度程序注册时指定的优先级.如果您使用具有相同优先级的触摸调度程序注册两个图层,则无论图层的Z顺序如何,第二个图层都将首先获得触摸.
当我遇到同样的问题时,这部分让我很困惑.而Z Order在视觉上将更高的数字放在彼此之上,而与触摸完全相反.较低的优先级数字实际上首先获得了触摸.为了保持自己的理智,我重构了我的代码,以便尽可能地以与Z索引相同的顺序添加图层,因此顶层的触摸将表现得直观.
当这是不可能的时候,我使用触摸优先级系统,我定义常量,以便我以后不会感到困惑.要使用优先级系统注册触摸,请使用以下命令:
-(void) registerWithTouchDispatcher {
[[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: DEFAULT_TOUCH_PRIORITY swallowsTouches:YES];
Run Code Online (Sandbox Code Playgroud)
}
小智 2
您是否使用0.8中添加的Touch Dispatcher?
像 v0.7.x 中那样调度触摸(标准)或一次触摸一次(目标)的单例。使用目标触摸的好处是您只收到您声明的触摸的事件(开始、移动、结束、取消)。使用目标触摸可以简化多点触摸和单点触摸游戏中的触摸处理代码。除非您需要复杂的触摸处理代码,否则建议使用目标触摸。
新 TouchDispatcher 的另一个好处是它有一个优先级队列,因此您可以更改触摸消费者的位置。
您可以使用优先级队列来完成您想要的任务。您可以在每个 Sprite 上设置优先级,以便定义哪些 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];
}
Run Code Online (Sandbox Code Playgroud)
优先级较高的代表将在优先级较低的代表之前做出响应。
归档时间: |
|
查看次数: |
4945 次 |
最近记录: |