与1.0相比Cocos2D 2.0的不同行为

问题描述:

我有几个使用Cocos2D创建的应用程序。与1.0相比Cocos2D 2.0的不同行为

我正在将其中一些升级到Cocos2D的新版本2.0。我使用的方法是:

  1. 我从标准模板创建一个新的空白项目
  2. 我的所有文件移动到新的项目

我一般保持层HelloWorld作为我的初始层。我注意到Cocos2D创建了一个introLayer作为最初的一个,我已经删除了它,并恢复了像之前一样加载Helloworld的行为。说我注意到几件事情:

  1. Helloworld的init方法内部的行为现在是不同的。我已经注意到方向在init方法中现在报告不正确。即使该应用只是风景,它也会始终将其报告为肖像。我注意到的还有,就像导演还没有完全初始化。如果我尝试使用导演的观点,这一点得到了证实。如果我尝试在Helloworld的init方法中使用它,这个视图总是无效的。

为了解决这个问题,我将所有的代码都移到了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永远不会被调用。

谢谢。

此问题的解决方案是将onEnter方法放在[super onEnter]上。

-(void) onEnter { 
    [super onEnter]; 
    self.isTouchEnabled = YES; 
} 

缺乏此行是创造所有类型的应用问题,如调度不灵,ccMove的怪异的行为,ccTransition不会触发onEnterTransitionDidFinish和所有类型的问题。

旋转问题是一个已知的错误。即使应用程序仅设置为横向模式,第一个场景也将以纵向模式初始化。这是因为init在方向被应用程序委托更新之前发生。将代码放入onEnter可以修复该问题,或者只是加载一个“介绍”场景,然后加载实际的第一个场景修复。

触摸问题可能不是Cocos2d 2.0的问题。也许这不像设置self.isTouchEnabled = YES那么简单。如果未调用registerWithTouchDispatcher方法,则isTouchEnabled未设置为YES,或者您不在CCLayer类中执行此操作,而可能是CCScene。

+0

我现在发现,我必须把它放在onEnter上:[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];出于某种原因,在Helloworld中,registerWithTouchDispatcher不会自动调用。另一件事是,现在我必须将CCTargetedTouchDelegate放在界面的Helloworld委托声明中。这样做后,ccTouchBegan现在被触发。现在我必须为支持触摸的所有类执行此操作......这是一个错误吗? – SpaceDog 2012-07-31 20:16:45

+0

是的,我正在做一个CClayer类。 Helloworld是由默认模板创建的。我现在已经发现了很多其他问题,并且我可能会使用2.0测试版保持该项目,直到2.0被修复。不管怎样,谢谢。 – SpaceDog 2012-07-31 20:42:30