上一篇写的贪食蛇的重力感应控制版,这一篇就讲下触摸控制版吧。额,也不知道写了那个贪食蛇教程究竟有没有获得沈老师的书,假设没有的话,看我不拿西瓜刀砍掉 偶尔E往事 的那啥!

重力版链接:http://blog.csdn.net/start530/article/details/23707985

触摸版与重力版的代码大部分都一样,不一样的地方就是要将打开重力感应换成创建一个触摸监听。步骤例如以下:

1、在GameLayer的init()中创建一个触摸监听事件

  1. //初始化游戏层
  2. bool GameLayer::init()
  3. {
  4. if ( !Layer::init() )
  5. {
  6. return false;
  7. }
  8. auto labhelp = LabelTTF::create("this is game","宋体",15);
  9. labhelp->setPosition(Point(0,340));
  10. this->addChild(labhelp);
  11. auto labback = LabelTTF::create("MainMenu","宋体",15);
  12. auto miback = MenuItemLabel::create(labback,[](Ref* sender)
  13. {
  14. Director::getInstance()->replaceScene(HelloWorld::createScene());
  15. });
  16. miback->setPosition(Point(360,200));
  17. //接受触摸事件
  18. auto listener = EventListenerTouchOneByOne::create();
  19. listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定触摸的回调函数
  20. listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
  21. listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
  22. _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//将listener放入事件托付中
  23. //初始化蛇头坐标和食物的坐标
  24. sHead = new SnakeNode();
  25. sHead->row = rand()%10;
  26. sHead->col = rand()%10;
  27. //初始化食物的坐标
  28. sFood = new SnakeNode();
  29. sFood->row = rand()%10;
  30. sFood->col = rand()%10;
  31. //运行定时任务
  32. this->schedule(schedule_selector(GameLayer::logic01),0.5);
  33. return true;
  34. }

2、在touchBegan()中检測触摸的位置,

  1. bool GameLayer::onTouchBegan(Touch* touch, Event  *event)
  2. {
  3. auto p = touch->getLocation();//获取当前的触点
  4. int nowrow; //当前用户触摸的行
  5. nowrow = ((int)p.y)/32;
  6. int nowcol; //当前用户触摸的列
  7. nowcol = ((int)p.x)/32;
  8. //假设触点的Y坐标相对于蛇头的Y坐标 大于 触点的X坐标相对于蛇头的X坐标,那么是上下移动,否则左右移动
  9. if( abs(nowrow - sHead->row) > abs(nowcol - sHead->col)) //上下移动
  10. {
  11. if(nowrow > sHead->row)
  12. {
  13. sHead->dir = DIR_DEF::UP;
  14. }
  15. else
  16. {
  17. sHead->dir=DIR_DEF::DOWN;
  18. }
  19. }
  20. else    //左右移动
  21. {
  22. if(nowcol > sHead->col)
  23. {
  24. sHead->dir=DIR_DEF::RIGHT;
  25. }
  26. else
  27. {
  28. sHead->dir=DIR_DEF::LEFT;
  29. }
  30. }
  31. CCLOG("rand %d",rand());
  32. CCLOG("you touchbegan%f,%f",p.x,p.y);
  33. return true;
  34. }

3、第三点仅仅是凑字数的。感觉写这么点东西对不起大家。所以祝大伙身体健康,万事如意,马年吉祥,合家欢乐, 幸福安康,大吉大利,早生贵子。早日成双,摆脱右手...啊呸,脱离单身!

尊重原创,转载请注明来源:http://blog.csdn.net/start530/article/details/23784985上一篇写的贪食蛇的重力感应控制版,这一篇就讲下触摸控制版吧。额,也不知道写了那个贪食蛇教程究竟有没有获得沈老师的书,假设没有的话,看我不拿西瓜刀砍掉 偶尔E往事 的那啥!


重力版链接:http://blog.csdn.net/start530/article/details/23707985

触摸版与重力版的代码大部分都一样,不一样的地方就是要将打开重力感应换成创建一个触摸监听。步骤例如以下:

1、在GameLayer的init()中创建一个触摸监听事件

  1. //初始化游戏层
  2. bool GameLayer::init()
  3. {
  4. if ( !Layer::init() )
  5. {
  6. return false;
  7. }
  8. auto labhelp = LabelTTF::create("this is game","宋体",15);
  9. labhelp->setPosition(Point(0,340));
  10. this->addChild(labhelp);
  11. auto labback = LabelTTF::create("MainMenu","宋体",15);
  12. auto miback = MenuItemLabel::create(labback,[](Ref* sender)
  13. {
  14. Director::getInstance()->replaceScene(HelloWorld::createScene());
  15. });
  16. miback->setPosition(Point(360,200));
  17. //接受触摸事件
  18. auto listener = EventListenerTouchOneByOne::create();
  19. listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定触摸的回调函数
  20. listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
  21. listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
  22. _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//将listener放入事件托付中
  23. //初始化蛇头坐标和食物的坐标
  24. sHead = new SnakeNode();
  25. sHead->row = rand()%10;
  26. sHead->col = rand()%10;
  27. //初始化食物的坐标
  28. sFood = new SnakeNode();
  29. sFood->row = rand()%10;
  30. sFood->col = rand()%10;
  31. //运行定时任务
  32. this->schedule(schedule_selector(GameLayer::logic01),0.5);
  33. return true;
  34. }

2、在touchBegan()中检測触摸的位置,

  1. bool GameLayer::onTouchBegan(Touch* touch, Event  *event)
  2. {
  3. auto p = touch->getLocation();//获取当前的触点
  4. int nowrow; //当前用户触摸的行
  5. nowrow = ((int)p.y)/32;
  6. int nowcol; //当前用户触摸的列
  7. nowcol = ((int)p.x)/32;
  8. //假设触点的Y坐标相对于蛇头的Y坐标 大于 触点的X坐标相对于蛇头的X坐标,那么是上下移动,否则左右移动
  9. if( abs(nowrow - sHead->row) > abs(nowcol - sHead->col)) //上下移动
  10. {
  11. if(nowrow > sHead->row)
  12. {
  13. sHead->dir = DIR_DEF::UP;
  14. }
  15. else
  16. {
  17. sHead->dir=DIR_DEF::DOWN;
  18. }
  19. }
  20. else    //左右移动
  21. {
  22. if(nowcol > sHead->col)
  23. {
  24. sHead->dir=DIR_DEF::RIGHT;
  25. }
  26. else
  27. {
  28. sHead->dir=DIR_DEF::LEFT;
  29. }
  30. }
  31. CCLOG("rand %d",rand());
  32. CCLOG("you touchbegan%f,%f",p.x,p.y);
  33. return true;
  34. }

3、第三点仅仅是凑字数的。感觉写这么点东西对不起大家。所以祝大伙身体健康,万事如意,马年吉祥,合家欢乐, 幸福安康,大吉大利,早生贵子。早日成双,摆脱右手...啊呸,脱离单身!

尊重原创,转载请注明来源:http://blog.csdn.net/start530/article/details/23784985

Cocos2dx 3.0 过渡篇(二十五)死不了的贪食蛇(触摸版)的更多相关文章

  1. Cocos2dx 3.0 过渡篇(三十)灰机还是3D好(Sprite3D)

    如今都非常少发3.0过渡篇这一系列的博文了,原因是多方面的,一个是游戏开发进度,尽管上面并没给我什么压力,但我自己一直在赶.还有一方面是个人私生活这块.五月份确实是多事之秋,有时候真的没办法全心思去研 ...

  2. Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)

    昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:"看到前面那俩教练没?老色鬼两枚!整天调戏女学员."她说:"还好啦,这毕竟是他们的乐趣所在,你不认为教练每 ...

  3. Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举

    一朋友在微信朋友圈晒了张照片,随手点开大图,带着赞赏的眼光扫了下,恩,几个月不见.又美丽了...咦?等等,她戴的这是什么?酷炫的造型! 金属边框! 微型摄像头! 这不是传说中的谷歌眼镜么?土豪啊,还好 ...

  4. Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事

    本文投票地址:http://vote.blog.csdn.net/Article/Details?articleid=37834689 前天看到一个颇为纠结的选择题:有一天你遇到一个外星人,这时外星人 ...

  5. Cocos2dx 3.0 过渡篇(二十九)globalZOrder()与localZOrder()

    前天非常难得的加班到八点...为什么说难得呢?由于平时我差点儿就没加班过.六点下班后想走就走,想留就留.率直洒脱.不拘一格.尽显男儿本色.程序猿,就是这么自信! -----------这篇博客的标题本 ...

  6. Cocos2dx 3.0 过渡篇(二十七)C++11多线程std::thread的简单使用(下)

    本篇接上篇继续讲:上篇传送门:http://blog.csdn.net/star530/article/details/24186783 简单的东西我都说的几乎相同了,想挖点深的差点把自己给填进去. ...

  7. WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]

    原文:WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇] 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Tra ...

  8. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)

    缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...

  9. 《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)

    1.简介 其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇.那是因为这个比较重要,所 ...

随机推荐

  1. JQuery日记_5.13 Sizzle选择器(六)选择器的效率

        当选择表达式不符合高速匹配(id,tag,class)和原生QSA不可用或返回错误时,将调用select(selector, context, results, seed)方法,此方法迭代DO ...

  2. [Network]Application Layer

    1 Principles of Network Applications 1.1 Application Architectures Client-Server Peer-to-Peer Hybird ...

  3. php学习笔记--error

    不同的错误处理方法: 简单的die()语句 自己定义错误函数和错误触发器 错误报告 主要的错误处理:使用die()函数 if(!file_exists("welcome.txt") ...

  4. Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1

    以下是一些设计略显繁琐,有必要清除思维. 下一个主要的成就,当我们点击Gobutton后,得到一个随机数骰子,是走了几步,它是基于以下步骤行走路径的数目,然后移动位置的基于角色的路径. 流程如图普遍认 ...

  5. mysql table is marked as crashed and last (automatic?) repair failed

    1.同事的服务器在mysqldump备份的时候报错了 这个原因是myisam的表数据太多,在某个时刻, 存放数据的这个MyISAM表数据急速长大. 比如一些log表, 当硬盘写满了.这个时候还在继续写 ...

  6. C#高性能TCP服务

    C#高性能TCP服务 哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!& ...

  7. POJ 1019 Number Sequence 解读

    这是一个看似简单,其实很难受. 本来我想发挥它的标题轨道基础.没想到反被消遣-_-|||. 看它在个人基础上,良好的数学就干脆点,但由于过于频繁,需求将被纳入全,因此,应该难度4星以上. 方法就是直接 ...

  8. 好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效button

    我们先来看看Quartz MS字体动态显示系统时间的效果,难度相较于上一篇也要简单很多. 首先是定义一个TextBlock例如以下. <Grid> <TextBlock Name=& ...

  9. [WebGL入门]二十四,补色着色

    注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,假设翻译有误,欢迎大家指 ...

  10. 移动web:tab选项卡

    平常做移动端会用到tab选项卡,这和PC端有些区别,移动端是触摸滑动切换,PC端是点击.移入切换. 这里滑动切换就是一个移动端事件的应用,这里主要用到的触摸事件:touchstart.touchmov ...