Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2

Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2,第1张

概述在编写获取路径方法前,我们先把角色需要的动画文件加载进来,角色的文件为png 和 plist格式。 player1_anim.png.plist             player1_anim.png   player2_anim.png.plist             player2_anim.png plist分别记录了每张图在整张png图中的位置 大小,我们只要知道每张小图名称即可从整

在编写获取路径方法前,我们先把角色需要的动画文件加载进来,角色的文件为png 和 pList格式。

player1_anim.png.pList player1_anim.png

player2_anim.png.pList player2_anim.png

pList分别记录了每张图在整张png图中的位置 大小,我们只要知道每张小图名称即可从整张png图中截取出想要的小图。

player1_anim.png图片为


player2_anim.png图片为



图片表示方法相同,每四张表示一个方向


我们在GameBaseScene中添加角色:

1、 首先定义addplayerAnimation()方法,这个方法主要是加载动画文件到内存 并创建角色需要的上下左右四个方向的动画

voID GameBaseScene::addplayerAnimation(){        //创建player1的帧缓存,并加载player1的动画图片到缓存	player1_spriteFrameCache = SpriteFrameCache::getInstance();	player1_spriteFrameCache->addSpriteFramesWithfile("map/player1_anim.pList","map/player1_anim.png");       //创建player2的帧缓存,并加载player2的动画图片到缓存	player2_spriteFrameCache = SpriteFrameCache::getInstance();	player2_spriteFrameCache->addSpriteFramesWithfile("map/player2_anim.pList","map/player2_anim.png");	//创建player1的上下左右四个方向的Vector 	Vector<SpriteFrame*> player1_anim_left_vector ;	Vector<SpriteFrame*> player1_anim_right_vector;	Vector<SpriteFrame*> player1_anim_down_vector;	Vector<SpriteFrame*> player1_anim_up_vector;	//创建player2的上下左右四个方向的Vector	Vector<SpriteFrame*> player2_anim_left_vector;	Vector<SpriteFrame*> player2_anim_right_vector;	Vector<SpriteFrame*> player2_anim_down_vector;	Vector<SpriteFrame*> player2_anim_up_vector;}        //定义name数组	char name[20];	memset(name,20);	//第1-4张图片是表示向左的动画,把这四张图片从缓存中取出,分别保存到相应角色的vector中	for (int i=1; i<=4; i++) 	{		sprintf(name,"player1_anim_%02d.png",i);		player1_anim_left_vector.pushBack(player1_spriteFrameCache->getSpriteFrameByname(name));		sprintf(name,"player2_anim_%02d.png",i);		player2_anim_left_vector.pushBack(player2_spriteFrameCache->getSpriteFrameByname(name));	}	//第5-8张图片是表示向右的动画	for (int i=5; i<=8; i++) 	{		sprintf(name,i);		player1_anim_right_vector.pushBack(player1_spriteFrameCache->getSpriteFrameByname(name));		sprintf(name,i);		player2_anim_right_vector.pushBack(player2_spriteFrameCache->getSpriteFrameByname(name));	}	//第9-12张图片是表示向下的动画	for (int i=9; i<=12; i++) 	{		sprintf(name,i);		player1_anim_down_vector.pushBack(player1_spriteFrameCache->getSpriteFrameByname(name));		sprintf(name,i);		player2_anim_down_vector.pushBack(player2_spriteFrameCache->getSpriteFrameByname(name));	}	//第13-16张图片是表示向上的动画	for (int i=13; i<=16; i++) 	{		sprintf(name,i);		player1_anim_up_vector.pushBack(player1_spriteFrameCache->getSpriteFrameByname(name));		sprintf(name,i);	}<span >	</span>//根据角色的上下左右四个vector 创建四个方向的动作	Animation * player1_animation_left = Animation::createWithSpriteFrames(player1_anim_left_vector,0.1f);	Animation * player1_animation_right = Animation::createWithSpriteFrames(player1_anim_right_vector,0.1f);	Animation * player1_animation_down = Animation::createWithSpriteFrames(player1_anim_down_vector,0.1f);	Animation * player1_animation_up = Animation::createWithSpriteFrames(player1_anim_up_vector,0.1f);	Animation * player2_animation_left = Animation::createWithSpriteFrames(player2_anim_left_vector,0.1f);	Animation * player2_animation_right = Animation::createWithSpriteFrames(player2_anim_right_vector,0.1f);	Animation * player2_animation_down = Animation::createWithSpriteFrames(player2_anim_down_vector,0.1f);	Animation * player2_animation_up = Animation::createWithSpriteFrames(player2_anim_up_vector,0.1f);	///根据角色的上下左右四个动作  创建四个方向的动画	player1_animate_left = Animate::create(player1_animation_left);	player1_animate_right = Animate::create(player1_animation_right);	player1_animate_down = Animate::create(player1_animation_down);	player1_animate_up = Animate::create(player1_animation_up);	player2_animate_left = Animate::create(player2_animation_left);	player2_animate_right = Animate::create(player2_animation_right);	player2_animate_down = Animate::create(player2_animation_down);	player2_animate_up = Animate::create(player2_animation_up);}

2、 创建完角色需要的文件后,还需要角色在地图的位置,由于能走的路径都在way图层中,在setWayPasstoGrID()方法中,我们把way图层中sprite的坐标保存到wayLayerPass_vector中,这样就可以根据其中的坐标设置角色的位置了

voID  GameBaseScene::setWayPasstoGrID(){	TMXLayer* wayLayer = _map->layernamed("way");	Size _mapSize = wayLayer->getLayerSize(); 	for (int j = 0;  j < _mapSize.wIDth; j++) {  		for (int i = 0;  i < _mapSize.height; i++) {  			Sprite* _sp = wayLayer->tileAt(Point(j,i));  			if (_sp) 			{  				float x = _sp->getpositionX();				float y = _sp->getpositionY();				int col = x/tileDWIDth;				int row = y/tiledHeight;				canPassGrID[row][col] = true;				//取得该位置的坐标,保存到对象wayLayerPass_vector中				Vec2 p = _sp->getposition();				wayLayerPass_vector.push_back(p);				log("canPassGrID row=  %d,col =%d,canpass = %d",row,col,canPassGrID[row][col]);			}  		}  	}  	log("setWayPasstoGrID finished");}

3、 添加的角色我们先封装成一个RicherPlayer类,该类记录角色的信息,包括角色名称、资金、体力、敌友


RicherPlayer* RicherPlayer::create(char* name,SpriteFrame* spriteFrame,bool enemy,int money,int strength){	RicherPlayer* player = new RicherPlayer();	player->init(name,spriteFrame,enemy,money,strength);	player->autorelease();	return player;}bool RicherPlayer::init(char* name,int strength){	Sprite::initWithSpriteFrame(spriteFrame);	_name = name;	_enemy = enemy;	_money = money;	_strength = strength;	return true;}

4、接下来在addplayer()方法中,从容器wayLayerPass_vector中随机取出坐标,进行角色的添加。
voID GameBaseScene:: addplayer(){	//指定随机数种子,随机数依据这个种子产生 采用当前时间生成随机种子:	struct timeval Now; 	gettimeofday(&Now,NulL); //计算时间种子	unsigned rand_seed = (unsigned)(Now.tv_sec*1000 + Now.tv_usec/1000);     // 初始化随机数   	srand(rand_seed);	//从帧缓存图片中取第一张,做为角色的初始图片	SpriteFrame* spf1 = player1_spriteFrameCache->getSpriteFrameByname("player1_anim_01.png");	player1 = RicherPlayer::create("player1",spf1,false);	//根据wayLayerPass_vector的坐标数量,取得随机的一个ID	int _rand1 = rand()%(wayLayerPass_vector.size()); 	log("rand %d",_rand1);	//根据ID,取出其中的坐标	Vec2 vec2ForPlayer1 = wayLayerPass_vector.at(_rand1);	//这个我们给纵向位置添加一个tiledHeight高度,目的是为了让角色居中显示在道路中	vec2ForPlayer1.y +=tiledHeight; 	//设置角色的位置,以及锚点	player1->setposition(vec2ForPlayer1);	player1->setAnchorPoint(ccp(0,0.5));	//log 相关	int col = vec2ForPlayer1.x/tileDWIDth;	int row = vec2ForPlayer1.y/tiledHeight;	log("player1 position row=  %d,col = %d",col);	log("player1 position x=  %f,y = %f",vec2ForPlayer1.x,vec2ForPlayer1.y);	//添加角色到地图场景	addChild(player1);	角色2的添加同角色1方法相同,不再累述	…………………}

测试ok 已经可以看到2个角色了




未完待续.......................


差点忘了代码

点击下载代码 http://download.csdn.net/detail/lIDeguo1979/8281909

总结

以上是内存溢出为你收集整理的Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2全部内容,希望文章能够帮你解决Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1024765.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存