【玩转cocos2d-x之十八】仿《中国好学霸》文字拖拽和定位

本文介绍了如何在cocos2d-x中实现文字的拖拽与自动定位功能,包括背景和文字精灵的添加、触摸事件的注册及处理等关键步骤。

原创作品,转载请标明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来读取xml
		CCDictionary* 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

打开链接下载源码: https://pan.quark.cn/s/05da658a2377 在信息技术领域中,输入法作为操作系统的一个核心构成部分,赋予了用户利用键盘输入多语种文字的能力。"ime-日语输入法安装必须文件"这一资源是一套为日语输入法部署而设计、包含全部必要元素的集成包,对于那些需要在个人计算机上执行日语文字输入的操作者而言具有不可替代的作用。接下来将深入剖析其中所包含的核心概念。 IME(Input Method Editor,输入法编辑器)是操作系统内的一种软件支持服务,其功能在于为非拉丁字符环境提供文字输入方案,例如中文、日文、韩文等文字系统。在日本地区,IME通常被用来将罗马字(罗马拼音)形式的输入转换为平假名、片假名乃至汉字。此压缩文件内含的日语IME文件夹即为执行这一转换功能的关键要素。 kbdjpn.dll被视为一个关键的系统性文件,其意指“Japanese Keyboard Layout”(日语键盘布局)。该动态链接库文件负责设定日语键盘的排列方式及快捷操作组合,使用户能够借助常规的QWERTY键盘输入日语文字。倘若缺少这一文件,即便已经安装了日语输入法,依然无法正常显示及输入日语字符。 另外,imjp81k.dll同样是一个重要的系统性构成,它属于日语IME的范畴,全称为“Input Method Japanese for Windows 8.1 and later, Katakana mode”(适用于Windows 8.1及更新版本的日语输入法,片假名模式)。该文件支持日语的片假名输入,是处理日语输入的核心组成部分。在安装或升级日语输入法的过程中,保证imjp81k.dll的准确性与完整性显得尤为关键。 压缩包所含的"Window...
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值