cocos2d-x 触摸原理
1. 触摸对象CCTouch理解
static CCTouch* s_pTouches[CC_MAX_TOUCHES] = { NULL }; //(多点触摸) 存储5个触摸对象 当一个触摸点触摸到屏幕时,一个触摸对象生成,直到触摸点离开屏幕 这个触摸对象消失。
这个对象的id值也存储在下面的字典中。
static CCDictionary s_TouchesIntergerDict; //字典 可以搜索查看字典使用 添加 删除 查找
理解这个触摸对象概念 即可 " 理解触摸滑动 多点触摸响应 ... "
2. 触摸原理分析
CCDirector(导演)中存在 CCTouchDispatcher "触摸调度对象"(该对象负责整个游戏中所有层的触
摸调度功能)
每一个"层"都继承CCTouchDelegate(一个触摸协议)当初始化一个层时设置是否有触摸逻辑,当有时,添加该层到CCDirector::CCTouchDispatcher 全局触摸调度中
CCTouchDispatcher(触摸调度) 其实就是包含CCArray数据结构的类 包括单点触摸CCArray 多点触摸CCArray 。
存储的单元 是“触摸句柄(CCTouchHandler)”即包含 触摸层(CCTouchDelegate)及优先级(nPriority)
总结: 当一个触摸点击时,首先产生一个有标识id的"触摸对象"CCTouch 。然后进入 触摸调度(CCTouchDispatcher)中 在CCArray中根据优先级调用相应的触摸层。触摸点即传到该层中
3. 多点触摸的理解 ????
多点触摸一直很怀疑最后传入 触摸层CCTouchDelegate中 ccTouchesBegan(CCSet *pTouches,
CCEvent *pEvent) CCSet 始终只有一个触摸对象 TouchesMove TouchesEnd 也一样
pMutableTouches = (bNeedsMutableSet ? pTouches->mutableCopy() : pTouches);
----上面一句是如果是多触摸 就拷贝保存当前的触摸对象
virtual void touchesBegan(CCSet* touches, CCEvent* pEvent);
virtual void touchesBegan(CCSet* touches, CCEvent* pEvent) = 0;
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
1. 触摸对象CCTouch理解
static CCTouch* s_pTouches[CC_MAX_TOUCHES] = { NULL }; //(多点触摸) 存储5个触摸对象 当一个触摸点触摸到屏幕时,一个触摸对象生成,直到触摸点离开屏幕 这个触摸对象消失。
这个对象的id值也存储在下面的字典中。
static CCDictionary s_TouchesIntergerDict; //字典 可以搜索查看字典使用 添加 删除 查找
理解这个触摸对象概念 即可 " 理解触摸滑动 多点触摸响应 ... "
2. 触摸原理分析
CCDirector(导演)中存在 CCTouchDispatcher "触摸调度对象"(该对象负责整个游戏中所有层的触
摸调度功能)
每一个"层"都继承CCTouchDelegate(一个触摸协议)当初始化一个层时设置是否有触摸逻辑,当有时,添加该层到CCDirector::CCTouchDispatcher 全局触摸调度中
CCTouchDispatcher(触摸调度) 其实就是包含CCArray数据结构的类 包括单点触摸CCArray 多点触摸CCArray 。
存储的单元 是“触摸句柄(CCTouchHandler)”即包含 触摸层(CCTouchDelegate)及优先级(nPriority)
总结: 当一个触摸点击时,首先产生一个有标识id的"触摸对象"CCTouch 。然后进入 触摸调度(CCTouchDispatcher)中 在CCArray中根据优先级调用相应的触摸层。触摸点即传到该层中
3. 多点触摸的理解 ????
多点触摸一直很怀疑最后传入 触摸层CCTouchDelegate中 ccTouchesBegan(CCSet *pTouches,
CCEvent *pEvent) CCSet 始终只有一个触摸对象 TouchesMove TouchesEnd 也一样
pMutableTouches = (bNeedsMutableSet ? pTouches->mutableCopy() : pTouches);
----上面一句是如果是多触摸 就拷贝保存当前的触摸对象
virtual void touchesBegan(CCSet* touches, CCEvent* pEvent);
virtual void touchesBegan(CCSet* touches, CCEvent* pEvent) = 0;
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)