0

有人可以帮助解决我在角色死亡时取消触摸事件时遇到的这个问题。我有基于屏幕 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 中进行的状态更改触发

请指教。

4

1 回答 1

0

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

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

于 2013-08-27T16:20:21.720 回答