【问题标题】:Cocos2D 2.0 different behavior compared to 1.0Cocos2D 2.0 与 1.0 相比的不同行为
【发布时间】:2012-07-31 19:05:58
【问题描述】:

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

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

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

我通常将层 Helloworld 作为我的初始层。我注意到 Cocos2D 创建了一个 introLayer 作为初始层,我已经删除了它并恢复了加载 Helloworld 的行为。说了这么多,我注意到了几点:

  1. Helloworld 的 init 方法中的行为现在有所不同。我注意到现在在 init 方法中错误地报告了方向。即使应用程序只是横向,它也会始终将其报告为纵向。我还注意到导演还没有完全初始化。如果我尝试使用导演的观点,这一点得到了证实。如果我尝试在 Helloworld 的 init 方法中使用它,这个视图总是无效的。

为了解决这个问题,我已将所有代码移至 Helloworld 的 onEnter 方法。现在,Helloworld 和 director 已完全初始化,一切正常。

这种方法适用于我为 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。

谢谢。

【问题讨论】:

    标签: cocos2d-iphone


    【解决方案1】:

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

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

    【讨论】:

    • 我现在发现我必须把它放在 onEnter 上:[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0swallowsTouches:YES];由于某种原因,在 Helloworld 中不再自动调用 registerWithTouchDispatcher。另一件事是,现在我必须将 CCTargetedTouchDelegate 放在 Helloworld 接口的委托声明上。完成此操作后,现在触发 ccTouchBegan。现在我必须对所有支持触摸的类都这样做......这是一个错误吗?
    • 是的,我在 CClayer 课程上做这件事。 Helloworld,因为它是由默认模板创建的。我现在发现了很多其他问题,我可能会继续使用 2.0 beta 的项目,直到 2.0 修复。无论如何,谢谢。
    【解决方案2】:

    这个问题的解决方法是在onEnter方法上加上[super onEnter]。

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

    缺少这条线会在应用程序上造成各种问题,例如调度程序无法正常工作、ccMove 的奇怪行为、ccTransition 未触发 onEnterTransitionDidFinish 以及各种问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2015-08-02
      • 2018-03-23
      • 2016-04-29
      相关资源
      最近更新 更多