【玩转cocos2d-x之十八】仿《中国好学霸》文字拖拽和定位
来源:互联网 发布:招商银行行情软件 编辑:程序博客网 时间:2024/04/29 21:20
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/13287519
现在各种猜成语猜歌名好学霸之类的游戏火的一塌糊涂。本节就介绍下文字的拖拽和定位。
1.基本原理
其实这只是精灵的简单拖拽和坐标的识别而已。当触摸点在精灵的范围内,精灵可以感应拖动,当触摸结束进行位置判断,如果在有效范围内就进行自动定位。
2.实现
2.1.背景加入和文字精灵的加入
这里是采用这一节http://blog.csdn.net/jackystudio/article/details/13014883所述方式添加中文。
bool AutoSet::init(){bool bRet=false;do {CC_BREAK_IF(!CCLayer::init());CCSize visiableSize=CCDirector::sharedDirector()->getVisibleSize();CCSprite* background=CCSprite::create("AutoSetBk.jpg");background->setPosition(ccp(visiableSize.width/2,visiableSize.height/2));this->addChild(background);//添加背景//利用CCDictionary来读取xmlCCDictionary* chnStrings = CCDictionary::createWithContentsOfFile("CHN_Strings.xml");const char *hao = ((CCString*)chnStrings->objectForKey("hao"))->m_sString.c_str(); text=CCLabelTTF::create(hao,"Arial",50);text->setPosition(ccp(120,160));text->setColor(ccc3(0,0,0));this->addChild(text);//添加文本this->setTouchEnabled(true);//设置触摸可用bRet=true;} while (0);return bRet;}
2.2.触摸的实现和拖拽的定位
因为3.0版本cocos2d-x的触摸实现已经变更了,所以这里不再赘述,3.0之前的触摸的原理和实现具体可以参见这一节http://blog.csdn.net/jackystudio/article/details/11860007
2.2.1注册触摸事件
void AutoSet::registerWithTouchDispatcher(void){CCDirector *pDirector=CCDirector::sharedDirector(); pDirector->getTouchDispatcher()->addTargetedDelegate(this,0,true);//单点触摸}
2.2.2.触摸开始
bool AutoSet::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){return true;//返回true表示接收触摸事件}
2.2.3.触摸过程
void AutoSet::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){CCPoint beginPoint = pTouch->getLocationInView(); //获取触摸位置beginPoint = CCDirector::sharedDirector()->convertToGL(beginPoint);//坐标转换CCPoint pt=text->getPosition();CCRect rect=CCRectMake(pt.x-30,pt.y-30,60,60);if (rect.containsPoint(beginPoint))//判断触摸点是否在文字上{CCPoint endPoint=pTouch->getPreviousLocationInView();//获取触摸的前一个位置 endPoint=CCDirector::sharedDirector()->convertToGL(endPoint); CCPoint offSet =ccpSub(beginPoint,endPoint);//获取offset CCPoint toPoint=ccpAdd(text->getPosition(),offSet); //获取真正移动位置text->setPosition(toPoint);//移动文字}}
2.2.4.触摸结束
void AutoSet::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){CCPoint lastPoint = pTouch->getLocationInView();//获取触摸结束点位置lastPoint = CCDirector::sharedDirector()->convertToGL(lastPoint);CCRect rect=CCRectMake(330,130,60,60);CCMoveTo* moveto;if (!rect.containsPoint(lastPoint))//如果未在指定区域,还原到初始位置{moveto=CCMoveTo::create(0.1f,ccp(120,160));}else//如果在指定区域,移动到该区域中心{moveto=CCMoveTo::create(0.1f,ccp(360,160));}text->runAction(moveto);}
3.效果图
4.源码下载
http://download.csdn.net/detail/jackyvincefu/6463261
- 【玩转cocos2d-x之十八】仿《中国好学霸》文字拖拽和定位
- 【玩转cocos2d-x之十八】仿《中国好学霸》文字拖拽和定位
- 【玩转cocos2d-x之二十八】cocos2d-x的消息和数据传递
- [置顶]【玩转cocos2d-x之二十八】cocos2d-x的消息和数据传递
- 【玩转cocos2d-x之二十八】cocos2d-x的消息和数据传递
- 【玩转cocos2d-x之二】游戏和引擎构成
- 【玩转cocos2d-x之十六】滚动字幕和公告
- 【玩转cocos2d-x之十六】滚动字幕和公告
- 玩转cocos2d-x之十六】滚动字幕和公告
- 【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode
- 【玩转cocos2d-x之二】游戏和引擎构成
- 【玩转cocos2d-x之十六】滚动字幕和公告
- 【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode
- 【玩转cocos2d-x之十】cocos2d-x坐标系
- 【玩转cocos2d-x之十七】cocos2d-x中文显示
- 【玩转cocos2d-x之十】cocos2d-x坐标系
- 【玩转cocos2d-x之十】cocos2d-x坐标系
- 【玩转cocos2d-x之十】cocos2d-x坐标系
- Leetcode: Remove Nth Node From End of List
- 第9周项目1-多分段函数的值
- struts2 标签的使用之二 s:iterator
- 分析师称苹果明年夏天推更大屏幕iPhone 6
- wx.Log 示例
- 【玩转cocos2d-x之十八】仿《中国好学霸》文字拖拽和定位
- Backbone源码分析——MVC模型
- JavaScript 垃圾回收
- 笔记本开机数字小键盘自动打开问题
- [转][重构到模式-Decorator Pattern]咖啡连锁店KataStarbuzzCoffee招式-刘成章版
- JS中的call()和apply()方法
- 结构化大数据的几种计算方法(二)
- 2013-C++第9周OJ题目及参考答案
- 游戏碰撞检测 AABB包围体 sphere 圆形包围体计算