cocos2d-x学习之触摸移动

本文介绍如何使用 Cocos2d-x 引擎通过触摸事件控制游戏角色移动。主要内容包括注册触摸事件、处理触摸开始及移动的方法,并提供具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游戏中控制人物行走的可以通过方向按键,也可以通过触摸屏幕轨迹来控制人物行走。


现在我们就来看看cocos2d-x引擎是怎样通过处理触摸屏幕事件来实现控制人物移动的。


在HelloWorld.h文件中 重写一下函数:

    virtual void registerWithTouchDispatcher();        //注册触摸事件
    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);  //触摸开始
    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);   //触摸移动


在HelloWorld.cpp文件中:


 初始化函数init()中添加:


 //添加精灵
CCSprite *spriteTest = CCSprite::create("aa.png"); 
spriteTest->setPosition(ccp(200,200));
this->addChild(spriteTest,0,520);
//使能触摸
this->setTouchEnabled(true);  

  

registerWithTouchDispatcher函数:

void HelloWorld::registerWithTouchDispatcher()
{
   //单点触摸
   CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true);
}


ccTouchBegan函数:


bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
	
	CCRect rect = this->getChildByTag(520)->boundingBox(); //获取精灵形状位置
	if(!rect.containsPoint(convertTouchToNodeSpace(pTouch)))  //判断触摸点是否为精灵范围
	{
		return false;
	}
	return true;
}



ccTouchMoved函数:
void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
        //控制精灵在屏幕范围内移动
	CCSize winSize = CCDirector::sharedDirector()->getWinSize();
	CCSize heroSize = this->getChildByTag(520)->getContentSize();
	CCPoint pos = pTouch->getLocation();
	if(pos.x>winSize.width-heroSize.width/2)
	{
		pos.x=winSize.width-heroSize.width/2;
	}
	if(pos.y>winSize.height-heroSize.height/2)
	{
		pos.y=winSize.height-heroSize.height/2;
	}
	if(pos.x<heroSize.width/2)
	{
		pos.x=heroSize.width/2;
	}
	if(pos.y<heroSize.height/2)
	{
		pos.y=heroSize.height/2;
	}

	//移动精灵
	this->getChildByTag(520)->setPosition(ccp(pos.x,pos.y));

}

这样精灵就可以随着触摸轨迹移动了,希望对大家有帮助。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值