【问题标题】:Second time entering scene, input not accepted第二次进入场景,不接受输入
【发布时间】:2013-02-18 19:08:04
【问题描述】:

我发现了 Cocos2D 的一个特殊之处,但我似乎无法修复它。我从 AppDelegate 加载到一个菜单,它是一个 CCScene。场景拥有一个 CCLayer,它本身拥有 CCMenu。一切工作都是第一次通过。游戏结束后,我将用户带到 GameOverScene 并提示他们返回菜单。我正在重新加载菜单场景并调用[[CCDirector sharedDirector] replaceScene:menu]。不过进入这个菜单后,并不是所有的输入功能。我不能再点击菜单项,但我可以平移/多点触控来触发该项目。什么给了?

在初始化时有什么方法可以重置 CCScene 以接收输入,如果是这样,这会扰乱 CCMenu 的输入接收吗?

【问题讨论】:

    标签: ios cocos2d-iphone ccmenuitem


    【解决方案1】:

    您是否覆盖了任何类中的任何 on* 方法,例如 onEnteronExit 等?

    如果是这样,你必须在每个中调用超级实现(即[super onEnter]),否则一些cocos2d功能如调度或输入可能会停止工作。

    【讨论】:

    • 这就是我最初检查的内容,但我没有覆盖任何 onEnters。
    • 真的很奇怪。菜单项没有记录任何点击,但滑动/平移/多点触控效果很好。
    • 另一个原因可能是您的场景泄漏。在场景的dealloc中设置断点,如果它永远不会触发你的旧场景仍在内存中,可能会导致各种奇怪的行为。
    • 我也试过了。一旦我离开场景进入游戏,菜单的 dealloc 就会被调用。
    • 我想不通,这让我发疯。可能是对 Kobold2d 的 KKInput 的某种干扰?我不这么认为...因为我什至没有在菜单中使用 KKInput,而是 ccmenu 内置的触摸处理。
    【解决方案2】:

    我终于想通了,答案就在我的眼皮底下。在我的游戏开发早期,我需要一种方法来阻止 KKInput 吞下手势。我不完全确定此操作的后果,但我能够这样做:

    KKInput* input = [KKInput sharedInput];
    UITapGestureRecognizer* tapGestureRecognizer;
    tapGestureRecognizer = input.tapGestureRecognizer;
    tapGestureRecognizer.cancelsTouchesInView = NO
    

    似乎 Kobold2D 的默认行为是吞下所有触摸,这阻止了 CCMenu 接收任何点击手势。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-03
      • 2021-12-27
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多