【问题标题】:Cancel ccTouch on State Change in Cocos2d-iPhone在 Cocos2d-iPhone 中取消 ccTouch on State Change
【发布时间】:2013-08-28 00:20:21
【问题描述】:

有人可以帮助解决我在角色死亡时取消触摸事件时遇到的这个问题。我有基于屏幕 X 轴的字符控制器(触摸精灵并左右拖动移动)。我的控制器类是 CCNode 的子类,并且具有向 TouchDispatcher 注册触摸所需的所有方法。 ccTouchBegin、ccTouchMove 和 ccTouchEnd 工作正常,但是当我的 ccTouchMove 正在运行并且我的角色死亡时,我想将控制器、玩家位置重置到屏幕上的起始位置,但直到我抬起手指才会触发(因此 ccTouchEnd)触发然后我的 GameLayer(CCLayer) 中的重置播放器/控制器触发。

我认为通过添加 CCTouchCancel 方法可以解决问题,但它没有被触发。我的每个 Touch 事件方法在执行任何操作之前都会首先检查控制器的状态(IDLE、ACTIVE、STOP)。我也有一个更新方法来处理拖动,但它还在允许玩家拖动/移动角色之前检查 controller.state == ACTIVE。

当我的角色死亡时,在我的 Gamelayer 的更新方法中,我设置了 controller.state = STOP。在控制器的 STOP 状态更新方法中,我调用了 [[[CCDirector sharedDirector] touchDispatcher] removeDelegate: self];,这与 onExit 方法中的代码相同,但触摸事件并未取消。只有当我抬起手指时,触摸事件才会停止。然后在 Gamelayer 中进行的状态更改触发

请指教。

【问题讨论】:

    标签: cocoa-touch cocos2d-iphone


    【解决方案1】:

    我知道为什么我的角色死亡时我的角色控制器没有将状态更改为 STOP。我已经实现了 CCTouchCancel 方法,但它没有被触发,因此在我将手指从屏幕上抬起之前,触摸事件永远不会取消。

    我已经实现了 update: (ccTime)delta 方法,在该方法中我检查 ACTIVE 状态并执行一些操作。注释掉更新方法后,一切都按我的预期工作。不需要更新方法,因为只要手指触摸屏幕,CCTouchMove 方法就会处理连续的触摸位置检测,无需运行更新方法。

    【讨论】:

      猜你喜欢
      • 2019-06-02
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 2016-11-17
      • 2019-03-10
      相关资源
      最近更新 更多