斗地主中滑动选择多张牌是怎么实现的

很多斗地主游戏中,都可以滑动选择多张牌,这种操作是怎么实现的呢?

我之前是想用onTouchMoved实现,但是因为设置了setSwallowTouches(true),所以点击一张牌移动时,其他的牌不响应触摸事件;

如果设置了setSwallowTouches(false),点击移动的时候,是可以选到多张牌,但是单击的时候(onTouchBegan),点两张牌重叠的地方,两张牌都会响应点击事件。

有个思路是,先设置setSwallowTouches(true),然后收到onTouchMoved事件,动态的设置setSwallowTouches(false),但不知道能不能实现。请高手指导个思路

顶一下,又有个想法,是不是可以用手势操作额外处理滑动多选

是不是可以在onTouchMoved方法里面循环判断当前的触摸点是否在卡牌里面,如果是的话就标记为选中。这样就可以了

现在是打算这么做,不过不能在原来卡牌上处理,因为setSwallowTouches,会导致之前我说的问题。准备在卡牌区上再加一层layer来专门处理onTouchMoved

首先给每张卡牌添加一个属性,判断当前状态是否改变过。把setSwallowTouches 设置为false。当在touchMoved的时候根据当前卡牌状态进行状态转变,如果状态变化了,则卡牌的属性设置为ture,接下来改变的卡牌就不会处理结果了。然后当touchEnd的时候再把所有卡牌的属性设置为false,然后就OK了。这样应该可以。

楼主问题解决了吗?跟你一样的问题,求指导啊

https://forum.cocos.com/t/topic/68607

1赞

通过状态来选择啊

状态:
1.卡牌自身有个状态 是否 被选择 selected ,默认为false
2. 配置一个移动容器 ,容积根据最多可能选择的牌数量,配置一个固定容器,装你的所有的扑克
3. 你的 一次操作,点单, 从左往右,从右往左 ,上下情况忽视,无意义。
不管你用哪种。 你的过程是,点击 移动 结束 。
然后就组织你的逻辑吧~~

点击 把第一张牌放进 容器
移动 持续的把牌装进容器,如果牌已经存在于容器,那么就把牌从容器删除(这里注意:你需要判断本次移动是否移出了 同一张牌,如果一直在同一张牌里面移动,就忽略,直到离开了同一张牌的边界,才做下一步判断)
结束 结算, 匹配你的扑克自身 的状态 , 如果为true ,你的移动容器里面又同时存在这张牌,那么把给个下移的ACTION,并把selected为false, 如果为false, 你的移动容器有这个牌,那么给个上移的action,并把selected置为true
移动容器,没有的牌,就不予改变就好了。

begin的时候记录选中牌的索引,move的时候算出当前的牌的索引,for循环begin的索引到move的索引全部设置选中状态

记录每个牌的x,y,width,height
然后在canvas上绑定onTouchStart,onTouchMove
然后onTouchStart中通过开始的位置判定,确定用户是否是想要选择牌,并记录每一张牌是当前的初始选择状态是选择or未选择
然后在onTouchMove的过程中,通过滑动的开始位置,当前位置,以及每一张牌的坐标及大小,判定本次滑动经过了哪些牌,然后经过的牌就的牌如果初始状态未选择就变成未选择,如果是未选择就变成已选择。