当我的角色死亡时,有人可以帮助解决我在取消触摸事件时遇到的这个问题。我有基于屏幕X轴的角色控制器(触摸精灵并向左/向右拖动)。我的控制器类是CCNode的子类,并具有与TouchDispatcher注册触摸所需的所有方法。 ccTouchBegin,ccTouchMove& ccTouchEnd工作正常,但是当我的ccTouchMove处于运行状态并且我的角色死亡时我想重置控制器,将玩家位置重置到屏幕上的起始位置但是直到我抬起手指(因此ccTouchEnd)触发然后我的重置播放器才触发我的GameLayer(CCLayer)中的/ controller触发。
我认为通过添加CCTouchCancel方法可以解决问题,但它不会被解雇。我的每个Touch事件方法在执行任何操作之前首先检查控制器的状态(IDLE,ACTIVE,STOP)。我有一个更新方法来处理拖动,但它也会在允许玩家拖动/移动角色之前检查controller.state == ACTIVE。
在我的Gamelayer的更新方法中,当我的角色死亡时,我设置了controller.state = STOP。在Controller的STOP状态更新方法中,我调用了[[[CCDirector sharedDirector] touchDispatcher] removeDelegate: self];
onExit
方法中的相同代码,但触摸事件未取消。触摸事件仅在我抬起手指时停止。然后在Gamelayer中进行状态更改
请告知。
答案 0 :(得分:0)
我弄清楚为什么我的角色的控制器在我的角色死亡时没有将状态改为STOP。我已经实现了CCTouchCancel方法,但它没有被触发,因此触摸事件从未取消,直到我将手指从屏幕上移开。
我实现了更新:(ccTime)delta方法,其中我检查ACTIVE状态并执行某些操作。在评论出更新方法后,一切都按预期工作。无需更新方法,因为只要手指触摸屏幕,CCTouchMove方法就可以处理连续触摸位置检测,无需运行更新方法。