昆特牌在整个游戏中需要三种触摸形式,一种是初始发牌时的换牌阶段,点击可以更换牌(镶嵌到tableview中),二是正常打牌阶段的触摸,点击两次后,将牌打出,第三种是医生的复活技能效果,选择墓地中的牌将其复活到场上,所以在上一节使用了3种触摸函数来达成这三种效果,以及npc的禁止点击的种类,所以采用了在onEnter中通过所需要的BType的值来确定触摸函数

void GWentCard::onEnter(){CCLayer::onEnter();//一定要用基类的onEnter,否则可能出现各种问题//触摸响应注册touchListener = EventListenerTouchOneByOne::create();//创建单点触摸事件监听器this->setTouchEnabled(true);//当为0时就使用如下触摸if(Spritetype==0){touchListener->onTouchBegan = CC_CALLBACK_2(GWentCard::onTouchBegan, this);//触摸开始touchListener->onTouchMoved = CC_CALLBACK_2(GWentCard::onTouchMoved, this);//触摸移动touchListener->onTouchEnded = CC_CALLBACK_2(GWentCard::onTouchEnded, this);//触摸结束touchListener->setSwallowTouches(false);//不向下吞并触摸_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);//注册分发器}else if(Spritetype==1){touchListener->onTouchBegan = CC_CALLBACK_2(GWentCard::onTouchBeganSelect, this);//触摸开始touchListener->onTouchMoved = CC_CALLBACK_2(GWentCard::onTouchMovedSelect, this);//触摸移动touchListener->onTouchEnded = CC_CALLBACK_2(GWentCard::onTouchEndedSelect, this);//触摸结束touchListener->setSwallowTouches(false);//不向下吞并触摸_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);//注册分发器}else if(Spritetype==2){touchListener->onTouchBegan = CC_CALLBACK_2(GWentCard::onTouchBeganSelectGrave, this);//触摸开始touchListener->onTouchMoved = CC_CALLBACK_2(GWentCard::onTouchMovedSelectGrave, this);//触摸移动touchListener->onTouchEnded = CC_CALLBACK_2(GWentCard::onTouchEndedSelectGrave, this);//触摸结束touchListener->setSwallowTouches(false);//不向下吞并触摸_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);//注册分发器}else if(Spritetype==3){}String *pow=String::createWithFormat("%d",this->getNewPower());auto label=LabelTTF::create(pow->getCString(),"",50);label->setAnchorPoint(Point(0.5,0.5));label->setName("power");Size size=this->getContentSize();label->setPosition(Point(32,size.height-30));label->setColor(Color3B(255,0,0));this->addChild(label,1);
}

下面简要挑一个触摸函数来说明,下面的函数是为了在发牌阶段使用的触摸函数,主要目的是点击后进行换牌,cocos2dx的触摸流程在上一篇中已经介绍过了,这里就不多说了,因为这个函数是用在tableview上的,所以必须保证在滑动时不触发点击效果,保证方法很容易,也就是在began中不进行处理,在end中如果点击位置和在began中的位置一样时,就进行处理点击效果,因为滑动后处于end位置的点必然和初始点击位置不同,在初始保存点击位置,于end中获取结束位置,比较两者如果一致,就触发点击效果,否则就不处理,之后的过程就是常规的换牌过程,就不多作解释了


bool GWentCard::onTouchBeganSelect(CCTouch *pTouch, CCEvent *pEvent){firstPoint=pTouch->getLocation();return true;
}
void GWentCard::onTouchMovedSelect(CCTouch *pTouch, CCEvent *pEvent){}
void GWentCard::onTouchEndedSelect(CCTouch *pTouch, CCEvent *pEvent){auto EndPoint=pTouch->getLocation();if(firstPoint!=EndPoint){return;}TableViewCell *cell=(TableViewCell *)this->getParent();TableViewCell *targetcell=(TableViewCell *)pEvent->getCurrentTarget()->getParent();int id=cell->getIdx();int idx=targetcell->getIdx();auto table=(TableView *)m_gameMain->getChildByTag(0);//cell需要获得两次parent才能拿到tableCCPoint ptouch=table->convertToNodeSpaceAR(pTouch->getLocation());auto distance=(int)(ptouch.x-table->getContentOffset().x)/690;//获得点击的页数即第几个cellSize size=this->getContentSize();Point p=this->getPosition();CCRect rect(p.x,p.y,size.width,size.height);log("%f",table->getContentOffset().x);if(cell->getIdx()==distance){auto dis=(-(int)(table->getContentOffset().x))/690;auto s=-(int)(table->getContentOffset().x)-distance*690;//auto m=690-s;ptouch.x=ptouch.x+s;// log("minx=%d,miny=%d,maxx=%d,maxy=%d",this->getBoundingBox().getMinX(),this->getBoundingBox().getMinY(),this->getBoundingBox().getMaxX(),this->getBoundingBox().getMaxY());if(rect.containsPoint(ptouch)){Array *deckarr= m_gameMain->getDeckArray();//获取牌组数据Dictionary *dic=(Dictionary *)deckarr->randomObject();//获取一个随机数int time= m_gameMain->getRetime();time=time+1;m_gameMain->setRetime(time);GWentCard *card=GWentCard::create(dic);card->setBType(1);card->setPosition(this->getPosition());card->setGameMain(this->getGameMain());card->setAnchorPoint(Point::ZERO);deckarr->addObject(this->dictionary);//加入牌组中m_gameMain->getHandArray()->addObject(dic);//加入手牌中   m_gameMain->getHandArray()->removeObject(this->dictionary);//从手牌中删除m_gameMain->setSelect(false);deckarr->removeObject(dic);//从牌组中删除  cell->removeChild(this);cell->addChild(card);card->getGameMain()->updateretimeslabelinfo(0);
//         //将被点击卡重新加入牌组中,并从牌组中拿出一张卡}}
}

少年啊,来一发昆特吗(二)——昆特牌的触摸相关推荐

  1. 从电影《雄狮少年》看CG技术(二)

    我在上一篇里面简单地讲了下CG的渲染,今天我们来聊聊CG建模方面的技术. 1.模型的表示方法 在计算机里面所有的物体都是用网格(mesh)来表示的,网格由很多单元(element)组成.这些单元可以是 ...

  2. 德州扑克实践之二------判断牌型

    实践二------牌型判断 起始 现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进 ...

  3. 第十五周项目二-洗牌(范形程序设计)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月7日 *版 本 ...

  4. 第15周项目二—洗牌(1)

    /*烟台大学计算机学院 02.03.*文件名称:xiangmu1.cpp 03.04.*作 者:李亚辉 04.05.*完成日期:2016年6月24日 05.06.*版 本 号:vc++6.0 06.0 ...

  5. DoozyUI⭐️二十二、Touchy:触摸输入监听组件

    文章目录

  6. 如何选择适合你的兴趣爱好(二十五),麻将

    围城网的摇摇今天给大家带来了"如何选择适合你的兴趣爱好"系列专辑的第二十五讲--麻将. 麻将是用竹子.骨头或塑料制成的小长方块,上面刻有花纹或字样,北方麻将每副136张,南方麻将多 ...

  7. 序列周期性与魔术(二)——扑克牌叠里的周期性

    上一篇文章,我们开启了序列周期性这一话题里的数学部分的分析: 传送门: 序列周期性与魔术(一)--数学里的函数周期性 其中,我们谈到一叠扑克牌在位置平移操作下的数学结构是最基础的群--循环群(Cycl ...

  8. 20位大佬,勾勒出一个中国网络安全江湖

    文章目录 一.为大家介绍20位大佬? 一 西安:西交大.西电.西工大 360 集团董事长兼 CEO:周鸿祎 赛博英杰 CEO:谭晓生 腾讯副总裁:丁珂 阿里云:吴翰清 知道创宇 CTO&COO ...

  9. 为什么当代人越来越不快乐?

    全世界只有3.14 % 的人关注了 爆炸吧知识 小时候哭着哭着就笑了,长大后笑着笑着就哭了. 生活不易,成年人叹气,房租水费,学习压力.工作不如意...各种无形的压力,压得人喘不过气. 如果一绷得太紧 ...

最新文章

  1. mysql查询日期内的所有日期代码
  2. 【Tree】迷宫生成算法
  3. sql,nolock
  4. mysql通过命令创建数据库和导入数据库
  5. livy提交任务报错com.cloudera.livy.shaded.kryo.kryo.KryoException: Unable to find class: GATest.ConJob
  6. SAP CRM WebClient UI配置的加载逻辑
  7. Com/ATL编程 一些学习链接
  8. 使用docker连接远程仓库反复出现密码错误
  9. 新手进阶:LoadRunner中Pacing的设置
  10. Node.js 使用 JWT 进行用户认证
  11. 医药/医疗/互联网医疗服务平台/问诊/挂号/开药/处方/医生/医院/问诊订单管理/移动端问诊医疗系统/医生端处方开药系统/web端医药服务平台管理/axure原型/rp源文件/健康咨询/视频问诊/统计
  12. 【POJ】1276 Cash Machine 【背包问题】
  13. 一个IE动画图标的小例子
  14. React 深度学习:ReactFiberRoot
  15. 中国人工智能趋势报告(完整版)
  16. Atitit opencv版本新特性attilax总结
  17. JavaScript基础知识总结(6张思维导图)
  18. CSS-DIV页面布局
  19. hive中reduce类函数说明
  20. 利用Java8新特性stream流给集合中的某个属性赋值

热门文章

  1. 【游戏程序设计】Direct 3D第一人称摄像机
  2. 什么是云计算?云计算学习方向有哪些?
  3. linux管理工具:WinSCP使用
  4. 6 GHz频段IMT系统对卫星固定业务干扰分析
  5. 企业微信内部小程序开发(获取用户userId)
  6. 魔众企业官网系统 v4.4.0 常规优化升级 系统更稳定
  7. deadline不用文件服务器可以么,易万盒子|渲染农场 Deadline 的功能详解与渲染流程...
  8. 星系测光:理论基础与实操
  9. 【C语言】用二分法递归实现乱序链表查找最大值和最小值
  10. 《勋伯格和声学》读书笔记(四):小调调式,小调自然音三和弦及其转位