与1.0相比,Cocos2D 2.0的行为不同

时间:2012-07-31 19:05:58

标签: cocos2d-iphone

我有几个用Cocos2D创建的应用程序。

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

  1. 我从标准模板
  2. 创建一个新的空白项目
  3. 我将所有文件移至新项目
  4. 我通常将图层Helloworld作为我的初始图层。我注意到Cocos2D创建了一个introLayer作为最初的一个,我已经删除了它并恢复行为以像以前一样加载Helloworld。说,我注意到了一些事情:

    1. Helloworld的init方法中的行为现在不同了。我注意到现在在init方法中错误地报告了方向。即使应用程序只是横向,它也会始终将其报告为纵向。我注意到的是,它就像导演尚未完全初始化。如果我尝试使用导演的观点,则确认了这一点。如果我尝试在Helloworld的init方法中使用它,那么这个视图总是无效的。
    2. 为了解决这个问题,我已将所有代码移至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。

      感谢。

2 个答案:

答案 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以及所有类型的问题。