Cocos2d-x 通过虚拟按键控制人物移动

玩过手机RPG的同学都知道,游戏中人物的移动一般都是通过触摸屏上的虚拟按键来实现,那么究竟是怎么实现的呢,我们来做一个简单的测试。
这里并没有按照其他Blog的实现来讲解,仅仅是通过我自己的想法。

为了方便起见,我并没有新建其他类,只是在新建程序的HelloWorld中来实现。


头文件:

	cocos2d::CCSprite* player;

	cocos2d::CCPoint ctrlPoint;

	virtual bool ccTouchBegan(cocos2d::CCTouch* pTouch, cocos2d::CCEvent* pEvent);
	virtual void ccTouchMoved(cocos2d::CCTouch* pTouch, cocos2d::CCEvent* pEvent);
	virtual void ccTouchEnded(cocos2d::CCTouch* pTouch, cocos2d::CCEvent* pEvent);

	cocos2d::CCAction* actionUp;
	cocos2d::CCAction* actionDown;
	cocos2d::CCAction* actionLeft;
	cocos2d::CCAction* actionRight;

首先我们利用一张拼合的角色图片来展示人物行走的动画


CCTexture2D* playerTexture = CCTextureCache::sharedTextureCache()->addImage("Player.png");

//新建四个数组,分别用来存放上下左右四个动画

		CCArray* framesUp = CCArray::create();
		CCArray* framesDown = CCArray::create();
		CCArray* framesLeft = CCArray::create();
		CCArray* framesRight = CCArray::create();

//通过循环将帧存入创建好的数组里

		CCSpriteFrame* frame = NULL;

		CCSpriteFrame* frameOriginal = NULL;

		for(int i = 0; i < 4; i ++)
		{
			for(int j = 0; j < 4; j ++)
			{
				frame = CCSpriteFrame::createWithTexture(playerTexture, CCRectMake(70 * j, 124 * i, 70, 124));
				if(i == 0 && j == 0)
				{
					frameOriginal = frame;
				}
				if(i == 0)
				{
					framesDown->addObject(frame);
				}else if(i == 1)
				{
					framesLeft->addObject(frame);
				}else if(i == 2)
				{
					framesRight->addObject(frame);
				}else if(i == 3)
				{
					framesUp->addObject(frame);
				}
			}
		}

//通过数组创建帧序列
		CCAnimation *animitionUp = CCAnimation::createWithSpriteFrames(framesUp, 0.1f);
		CCAnimation *animitionDown = CCAnimation::createWithSpriteFrames(framesDown, 0.1f);
		CCAnimation *animitionLeft = CCAnimation::createWithSpriteFrames(framesLeft, 0.1f);
		CCAnimation *animitionRight = CCAnimation::createWithSpriteFrames(framesRight, 0.1f);

//通过帧序列动画和移动创建上人物下左右移动动作
		actionUp = CCSpawn::createWithTwoActions(CCAnimate::create(animitionUp), CCMoveBy::create(0.4f, ccp(0, 32)));
		actionDown = CCSpawn::createWithTwoActions(CCAnimate::create(animitionDown), CCMoveBy::create(0.4f, ccp(0, -32)));
		actionLeft = CCSpawn::createWithTwoActions(CCAnimate::create(animitionLeft), CCMoveBy::create(0.4f, ccp(-32, 0)));
		actionRight = CCSpawn::createWithTwoActions(CCAnimate::create(animitionRight), CCMoveBy::create(0.4f, ccp(32, 0)));

		actionUp->retain();
		actionDown->retain();
		actionLeft->retain();
		actionRight->retain();

//将第一帧用来创建人物精灵
		player = CCSprite::createWithSpriteFrame(frameOriginal);

		CCSize winSize = CCDirector::sharedDirector()->getWinSize();

		this->addChild(player, 1);
		player->setPosition(ccp(winSize.width / 2, winSize.height / 2));



//处理触摸事件
bool HelloWorld::ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent)
{
	CCPoint location = this->convertTouchToNodeSpace(pTouch);
	int x = location.x - ctrlPoint.x;
	int y = location.y - ctrlPoint.y;

//根据触摸到控制杆的不同位置向不同的方向移动,画个直角坐标系就出来了
	if(y > x && y > -x)
	{
		player->runAction(actionUp);
	}
	else if(-y > x && -y > -x)
	{
		player->runAction(actionDown);
	}
	else if(-x > y && -x > -y)
	{
		player->runAction(actionLeft);
	}
	else if(x > y && x > -y)
	{
		player->runAction(actionRight);
	}
	return true;
}



这个就是运行的最终效果图了,背景可以自己添加,通过点击那块黑乎乎的控制杆就能移动人物了


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos2d-x是一款非常流行的移动跨平台游戏引擎。它提供了丰富的功能和工具,方便开发者进行游戏开发。有多本与Cocos2d-x移动游戏开发相关的书籍被出版,这些书籍提供了全面的教程和实战经验。 其中,《捕鱼达人游戏开发》是一本全面的、比较实用的Cocos2d-x游戏开发教程。这本书汇集了热门手机游戏《捕鱼达人》开发的实战经验,作者从基础内容开始介绍Cocos2d-x引擎,并逐步深入地介绍了相关的开发技术和经验。 还有一本《Cocos2d-x高级开发教程》,该书作者曾参与Cocos2d-x for Windows Phone 7引擎的开发,并负责《捕鱼达人》系列游戏Windows Phone版本的移植工作。作者也参与了多个移动游戏项目的开发,拥有丰富的游戏开发经验。 除了这些书籍,还有《Cocos2D-X游戏开发技术精解》。这本书详细介绍了如何使用Cocos2D-X引擎开发移动平台游戏,包括引擎的简介以及其他相关内容。 总结来说,Cocos2d-x是一款流行的移动跨平台游戏引擎,有多本相关的书籍提供了全面的教程和实战经验,适合想要进行Cocos2d-x移动游戏开发的开发者参考和学习。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Cocos2d-x高级开发教程](https://download.csdn.net/download/surport_t/9776900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Cocos2d-x高级开发教程制作自己的《捕鱼达人》](https://download.csdn.net/download/qq461787436/10872674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Cocos2D-X游戏开发技术精解](https://download.csdn.net/download/weixin_39840588/11417620)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值