刚刚入cocos2dx一段时间,最近在做一款游戏,有关触摸事件有几个疑问请教社区里的同胞0-0:
1、onTouchEnd() 触摸结束时,获取到的target(精灵)是不是最初onTouchBegan()触摸得到的那个Sprite?我自己做了个测试,输出的是一样的,不知道我得到的结果对不对?
2、onTouchMoved触摸经过时,和1的问题一样。是不是只检测最开始触摸到的那个精灵?
3、有一串精灵,我想开始时触摸某个精灵,然后触摸结束时(松开爪子)把滑动过程中中间的那部分精灵都集体移动一段距离,这个大概怎么实现呢?
我刚刚查了查文章,有这么一段话:
注意:virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)的返回值对触屏消息是有影响的。
如果返回false,表示不处理ccTouchMoved(),ccTouchEnded(),ccTouchCanceld()方法,而交由后面接收触屏消息的对象处理;如果返回true,表示会处理ccTouchMoved(),ccTouchEnded(),ccTouchCanceld()方法,并且消耗掉此触屏消息,后面需要接收触屏消息的对象就接收不到触屏消息了。
是不是onTouchBegan返回true后,后面触摸经过和结束都还有效,但是对其它的精灵就无效了,因为消耗掉触屏消息了?
一次完整的触摸事件,一定会有开始和结束的。对于你说的,在begin阶段,返回false,可以理解为:这次触摸事件,你判定完成了。返回的值是ture还是false,是由你自己判断的。对于你的第一个问题,你触摸到精灵了,那么你就做了判断的,结束的时候,你触摸到的区域,不一定就是你开始的那个,因为还有一个移动的过程,可能在移动过程中,走出了第一个精灵的区域。move是一样的。对于你想开始是触摸到某个精灵,然后结束的时候,移动一部分。这个可以这样试试。在开始时,你判断触摸到你需要的精灵了,在移动过程中,将你需要移动的精灵保存,结束的时候,进行移动!
以上纯属个人见解。欢迎大神批评!
嗯,你说的关于单个精灵移动,我已经实现了。对于多个精灵呢?比如有,1-10个精灵并排放着,我开始点的是1号精灵,松开触摸时是在10号精灵处,我想松开的时候让经过的1-10号精灵集体移动一小段确定的距离(如(1,2),请问这个你之前做过吗?
这个你得自己判断一下经过了哪些精灵了。至于移动的话,你在onTouchEnd()里去改动精灵的位置就可以了。
之前是用的单个精灵添加触摸事件,怎么也不行。后来我把10个精灵放在一个Layout上,用移动的坐标来换算成精灵的位置,这样把这个问题解决了。不过遗留下只能选中移动,不能回退的小问题,还在调试中。
回退,就是比如移动时经过了6个精灵,我触摸返回去一段距离,还是选中的6个精灵,不能变成3个等。大概意思是这样。