我有几个用Cocos2D创建的应用程序。
我正在将其中一些升级到Cocos2D的新版本2.0。我正在使用的方法是:
我通常将图层Helloworld作为我的初始图层。我注意到Cocos2D创建了一个introLayer作为最初的一个,我已经删除了它并恢复行为以像以前一样加载Helloworld。说,我注意到了一些事情:
为了解决这个问题,我已将所有代码移至Helloworld的onEnter方法。现在,Helloworld和导演已经完全初始化,一切正常。
这个方法适用于我为Cocos2D 1.0升级到2.0的第一批应用程序,但是我现在从Cocos2D 2.0beta转换为2.0 final的应用程序出了问题。
我现在遇到的问题是Helloworld没有引发任何接触,是的,我已经实现了这一点:
-(void) registerWithTouchDispatcher
{
[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
return YES;
}
什么可以阻止Helloworld检测2.0中的触摸?如何使Helloworld的init方法表现得像2.0 beta或1.0?
注意:Helloworld加载时,永远不会调用ccTouchBegan和registerWithTouchDispatcher。
感谢。
答案 0 :(得分:3)
轮换问题是一个已知错误。即使应用程序仅设置为横向,第一个场景也将以纵向模式初始化。那是因为init在应用代表更新了方向之前发生了。将代码放在onEnter上修复,或者只是加载一个“介绍”场景,然后加载实际的第一个场景修复。
触摸问题可能不是cocos2d 2.0的问题。也许它就像设置self.isTouchEnabled = YES
一样简单。如果未调用registerWithTouchDispatcher方法,则isTouchEnabled未设置为YES,或者您没有在CCLayer类中执行此操作,但可能是CCScene。
答案 1 :(得分:0)
这个问题的解决方案是在onEnter方法上放置[super onEnter]。
-(void) onEnter {
[super onEnter];
self.isTouchEnabled = YES;
}
缺少这一行是在应用程序上造成各种问题,例如调度程序无法正常工作,ccMove的奇怪行为,ccTransition没有触发onEnterTransitionDidFinish以及所有类型的问题。