Cocos2dx 3.0 过渡篇(二十五)死不了的贪食蛇(触摸版)
上一篇写的贪食蛇的重力感应控制版,这一篇就讲下触摸控制版吧。额,也不知道写了那个贪食蛇教程究竟有没有获得沈老师的书,假设没有的话,看我不拿西瓜刀砍掉 偶尔E往事 的那啥!
重力版链接:http://blog.csdn.net/start530/article/details/23707985
触摸版与重力版的代码大部分都一样,不一样的地方就是要将打开重力感应换成创建一个触摸监听。步骤例如以下:
1、在GameLayer的init()中创建一个触摸监听事件
- //初始化游戏层
- bool GameLayer::init()
- {
- if ( !Layer::init() )
- {
- return false;
- }
- auto labhelp = LabelTTF::create("this is game","宋体",15);
- labhelp->setPosition(Point(0,340));
- this->addChild(labhelp);
- auto labback = LabelTTF::create("MainMenu","宋体",15);
- auto miback = MenuItemLabel::create(labback,[](Ref* sender)
- {
- Director::getInstance()->replaceScene(HelloWorld::createScene());
- });
- miback->setPosition(Point(360,200));
- //接受触摸事件
- auto listener = EventListenerTouchOneByOne::create();
- listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定触摸的回调函数
- listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
- listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
- _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//将listener放入事件托付中
- //初始化蛇头坐标和食物的坐标
- sHead = new SnakeNode();
- sHead->row = rand()%10;
- sHead->col = rand()%10;
- //初始化食物的坐标
- sFood = new SnakeNode();
- sFood->row = rand()%10;
- sFood->col = rand()%10;
- //运行定时任务
- this->schedule(schedule_selector(GameLayer::logic01),0.5);
- return true;
- }
2、在touchBegan()中检測触摸的位置,
- bool GameLayer::onTouchBegan(Touch* touch, Event *event)
- {
- auto p = touch->getLocation();//获取当前的触点
- int nowrow; //当前用户触摸的行
- nowrow = ((int)p.y)/32;
- int nowcol; //当前用户触摸的列
- nowcol = ((int)p.x)/32;
- //假设触点的Y坐标相对于蛇头的Y坐标 大于 触点的X坐标相对于蛇头的X坐标,那么是上下移动,否则左右移动
- if( abs(nowrow - sHead->row) > abs(nowcol - sHead->col)) //上下移动
- {
- if(nowrow > sHead->row)
- {
- sHead->dir = DIR_DEF::UP;
- }
- else
- {
- sHead->dir=DIR_DEF::DOWN;
- }
- }
- else //左右移动
- {
- if(nowcol > sHead->col)
- {
- sHead->dir=DIR_DEF::RIGHT;
- }
- else
- {
- sHead->dir=DIR_DEF::LEFT;
- }
- }
- CCLOG("rand %d",rand());
- CCLOG("you touchbegan%f,%f",p.x,p.y);
- return true;
- }
3、第三点仅仅是凑字数的。感觉写这么点东西对不起大家。所以祝大伙身体健康,万事如意,马年吉祥,合家欢乐, 幸福安康,大吉大利,早生贵子。早日成双,摆脱右手...啊呸,脱离单身!
重力版链接:http://blog.csdn.net/start530/article/details/23707985
触摸版与重力版的代码大部分都一样,不一样的地方就是要将打开重力感应换成创建一个触摸监听。步骤例如以下:
1、在GameLayer的init()中创建一个触摸监听事件
- //初始化游戏层
- bool GameLayer::init()
- {
- if ( !Layer::init() )
- {
- return false;
- }
- auto labhelp = LabelTTF::create("this is game","宋体",15);
- labhelp->setPosition(Point(0,340));
- this->addChild(labhelp);
- auto labback = LabelTTF::create("MainMenu","宋体",15);
- auto miback = MenuItemLabel::create(labback,[](Ref* sender)
- {
- Director::getInstance()->replaceScene(HelloWorld::createScene());
- });
- miback->setPosition(Point(360,200));
- //接受触摸事件
- auto listener = EventListenerTouchOneByOne::create();
- listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定触摸的回调函数
- listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
- listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
- _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//将listener放入事件托付中
- //初始化蛇头坐标和食物的坐标
- sHead = new SnakeNode();
- sHead->row = rand()%10;
- sHead->col = rand()%10;
- //初始化食物的坐标
- sFood = new SnakeNode();
- sFood->row = rand()%10;
- sFood->col = rand()%10;
- //运行定时任务
- this->schedule(schedule_selector(GameLayer::logic01),0.5);
- return true;
- }
2、在touchBegan()中检測触摸的位置,
- bool GameLayer::onTouchBegan(Touch* touch, Event *event)
- {
- auto p = touch->getLocation();//获取当前的触点
- int nowrow; //当前用户触摸的行
- nowrow = ((int)p.y)/32;
- int nowcol; //当前用户触摸的列
- nowcol = ((int)p.x)/32;
- //假设触点的Y坐标相对于蛇头的Y坐标 大于 触点的X坐标相对于蛇头的X坐标,那么是上下移动,否则左右移动
- if( abs(nowrow - sHead->row) > abs(nowcol - sHead->col)) //上下移动
- {
- if(nowrow > sHead->row)
- {
- sHead->dir = DIR_DEF::UP;
- }
- else
- {
- sHead->dir=DIR_DEF::DOWN;
- }
- }
- else //左右移动
- {
- if(nowcol > sHead->col)
- {
- sHead->dir=DIR_DEF::RIGHT;
- }
- else
- {
- sHead->dir=DIR_DEF::LEFT;
- }
- }
- CCLOG("rand %d",rand());
- CCLOG("you touchbegan%f,%f",p.x,p.y);
- return true;
- }
3、第三点仅仅是凑字数的。感觉写这么点东西对不起大家。所以祝大伙身体健康,万事如意,马年吉祥,合家欢乐, 幸福安康,大吉大利,早生贵子。早日成双,摆脱右手...啊呸,脱离单身!
尊重原创,转载请注明来源:http://blog.csdn.net/start530/article/details/23784985
Cocos2dx 3.0 过渡篇(二十五)死不了的贪食蛇(触摸版)的更多相关文章
- Cocos2dx 3.0 过渡篇(三十)灰机还是3D好(Sprite3D)
如今都非常少发3.0过渡篇这一系列的博文了,原因是多方面的,一个是游戏开发进度,尽管上面并没给我什么压力,但我自己一直在赶.还有一方面是个人私生活这块.五月份确实是多事之秋,有时候真的没办法全心思去研 ...
- Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)
昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:"看到前面那俩教练没?老色鬼两枚!整天调戏女学员."她说:"还好啦,这毕竟是他们的乐趣所在,你不认为教练每 ...
- Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举
一朋友在微信朋友圈晒了张照片,随手点开大图,带着赞赏的眼光扫了下,恩,几个月不见.又美丽了...咦?等等,她戴的这是什么?酷炫的造型! 金属边框! 微型摄像头! 这不是传说中的谷歌眼镜么?土豪啊,还好 ...
- Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事
本文投票地址:http://vote.blog.csdn.net/Article/Details?articleid=37834689 前天看到一个颇为纠结的选择题:有一天你遇到一个外星人,这时外星人 ...
- Cocos2dx 3.0 过渡篇(二十九)globalZOrder()与localZOrder()
前天非常难得的加班到八点...为什么说难得呢?由于平时我差点儿就没加班过.六点下班后想走就走,想留就留.率直洒脱.不拘一格.尽显男儿本色.程序猿,就是这么自信! -----------这篇博客的标题本 ...
- Cocos2dx 3.0 过渡篇(二十七)C++11多线程std::thread的简单使用(下)
本篇接上篇继续讲:上篇传送门:http://blog.csdn.net/star530/article/details/24186783 简单的东西我都说的几乎相同了,想挖点深的差点把自己给填进去. ...
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]
原文:WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇] 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Tra ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)
缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...
- 《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)
1.简介 其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇.那是因为这个比较重要,所 ...
随机推荐
- 怎么样excel其产生的条形码(10分钟的时间excel)从而出现了条形码
现在快递行业.京东购物,这样一来,使用条码管理,因此,如何在你的excel其中还生产商品条码管理它?其实很easy,4步骤学会!10分钟搞定. 1.从网址如下.下载字体, 2.双击安装字体. 3,在e ...
- (23)unity4.6学习Ugui中国文档-------非官方Demo1
大家好,我是广东太阳. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unitym ...
- linux grep命令详解(转)
简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...
- 用C设计,用C++编码
昨天晚上看到刘江的blog又补充了好几大段,今天早上又看到云风的人肉trackback,果然还是这种话题引人关注. 云风先是提了一下所谓C++带来的思想包袱(文言文曰“心智包袱”)问题,然 ...
- uva live 4394 String painter 间隔dp
// uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...
- 设置Windows 8.1屏幕自己主动旋转代码, Auto-rotate function code
程序代码实现启用或禁用Windows 8.1 Tablet的自己主动旋转功能 方法一:使用SetDisplayAutoRotationPreferences函数功能 #include <Wind ...
- HDU 2063 过山车 二分图题解
一个男女搭配的关系图,看能够凑成多少对,基本和最原始的一个二分图谜题一样了,就是 一个岛上能够凑成多少对夫妻的问题. 所以是典型的二分图问题. 使用匈牙利算法,写成两个函数,就很清晰了. 本程序还带分 ...
- Linux安装jdk 8和环境变量配置
1.下载jdk 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.将刚刚 ...
- 【SICP读书笔记(二)】使用过程来黏合数据 —— 酷炫吊的消息传递机制
首先,让我们来看几个内建函数 (cons x y),作用是把x和y绑定成一个序对 (car z),作用是提取z序对的第一个元素 (cdr z),作用是提取z序对的第二个元素 容易看出,这个东西有点类似 ...
- ZOJ 3728 Collision
---恢复内容开始--- 今天无事水一水,结果就看到这个水题了! 题意思是 有俩个区域如图 求在俩个圆之间的运动时间 给出 初始的开始点和速度的矢量式;而且这个点 不再俩个圆之间的区域,且碰到内测园会 ...