Cocos2d-x 3.2 大富翁游戏项目开发-第六部分 地图设计

Cocos2d-x 3.2 大富翁游戏项目开发-第六部分 地图设计,第1张

概述在选择地图后,我们将进入游戏地图,所以我们必须先把地图编辑一下,使用Tiled地图编辑工具。 1、打开Tiled工具,新建文件,设置 地图大小:宽20块高 15块 块大小:     宽和高都是32像素 这样地图宽为 20 X 32 = 640  高 15 X 32 =480 我们调试的视图尺寸为 800 X 480   宽度剩余160像素 ,我们用来放置游戏控制控件和 显示人物的一些信息 2、点击

在选择地图后,我们将进入游戏地图,所以我们必须先把地图编辑一下,使用Tiled地图编辑工具。

1、打开Tiled工具,新建文件,设置

地图大小:宽20块高 15块

块大小: 宽和高都是32像素

这样地图宽为 20 X 32 = 640 高 15 X 32 =480

我们调试的视图尺寸为 800 X 480 宽度剩余160像素 ,我们用来放置游戏控制控件和 显示人物的一些信息


2、点击地图—新图块

选择sea.png图片,图片上部中我放置了15个道具,分别是空白地块、道路、增加体力的分值、偶然事件等,后续使用的时候我再具体说明



3、选择除道具之外的图片填充满空白图块。并修改本图层名称为“ground”

4、新建图层,命名为”way” ,这一层我们主要放置道路以及各种道具

5、新建图层,命名为“land” ,这一层放置空白地块

6、保存文件为”sea.tmx”



下面开始加载地图

由于每个关卡场景都需要加载地图,所以我们写一个基类GameBaseScene,用来加载地图,每个游戏关卡场景只有继承该类即可


GameBaseScene.h文件//定义画表格的初始位置 和 每行每列的宽高值const int tableStartposition_x = 650; const int tableStartposition_y = 450;const int tableWIDth = 50;const int tableHeight = 40;class GameBaseScene: public Layer{public:    static Scene* createScene();   TMXTiledMaP* _map; //定义地图    virtual bool init();  virtual voID addMap();//添加地图方法     CREATE_FUNC(GameBaseScene);private:	voID drawtable(int playerNumber); //画表格,用来放置角色,根据上边定义的变量画	voID addplayer();//添加游戏角色部分信息方法,在控制栏先显示头像,资金 体力值等	voID addRightBanner();//添加右边地图空白部分背景,上方放置人物等信息};#endif


GameBaseScene.cpp文件


//调用了添加地图方法,添加banner背景 ,画表格 ,添加游戏人物部分信息方法bool GameBaseScene::init(){	if ( !Layer::init() )	{		return false;	}	addMap();	addRightBanner();	drawtable(2);	addplayer();	return true;}voID  GameBaseScene::addRightBanner(){	Sprite* rightBanner = Sprite::create(RIGHT_BANNER);	rightBanner->setAnchorPoint(ccp(0,0));	rightBanner->setposition( ccp(tableStartposition_x,0));//根据头文件定义的初始x值设置位置	addChild(rightBanner);}


//绘制表格,这部分代码可以不用看,只要知道是根据游戏人物数量,绘制表格 ,可以采用图片替换这个绘制。自己感觉用图片不如表格计算位置精确。voID GameBaseScene:: drawtable(int playerNumber){	auto s = Director::getInstance()->getWinSize();		auto draw = DrawNode::create();	this->addChild(draw);	for(int i=0;i<playerNumber;i++)	{		draw->drawSegment(Vec2(tableStartposition_x,tableStartposition_y-2*i*tableHeight),Vec2(tableStartposition_x+ 3*tableWIDth,1,color4F(0,1));		draw->drawSegment(Vec2(tableStartposition_x,tableStartposition_y - 2*(i+1)*tableHeight),1));		draw->drawSegment(Vec2(tableStartposition_x+ tableWIDth,tableStartposition_y - tableHeight-2*i*tableHeight),tableStartposition_y -2*i*tableHeight),Vec2(tableStartposition_x+ tableWIDth,tableStartposition_y -2* tableHeight-2*i*tableHeight),1));	}}


//添加人物信息的方法,就是根据绘制的表格位置,把人物头像 、资金 、体力等信息同表格对齐显示,主要是坐标计算。voID GameBaseScene:: addplayer(){	Sprite* player_me = Sprite::create(PLAYER_ME);	player_me->setposition(tableStartposition_x+tableWIDth/2,tableStartposition_y-tableHeight);	addChild(player_me);    LabelTTF *player_me_money = LabelTTF::create();    player_me_money->setString("$");	player_me_money->setAnchorPoint(ccp(0,0.5));    player_me_money->setFontSize(25);    player_me_money->setposition(tableStartposition_x+tableWIDth,tableStartposition_y-tableHeight/2);    addChild(player_me_money);    LabelTTF *player_me_strength = LabelTTF::create();    player_me_strength->setString("+");	player_me_strength->setAnchorPoint(ccp(0,0.5));    player_me_strength->setFontSize(28);    player_me_strength->setposition(tableStartposition_x+tableWIDth,tableStartposition_y-tableHeight/2*3);    addChild(player_me_strength);	Sprite* player_enemy1 = Sprite::create(PLAYER_ENEMY1);	player_enemy1->setposition(tableStartposition_x+tableWIDth/2,tableStartposition_y-3*tableHeight);	addChild(player_enemy1);    LabelTTF *player_enemy1_money = LabelTTF::create();    player_enemy1_money->setString("$");	player_enemy1_money->setAnchorPoint(ccp(0,0.5));    player_enemy1_money->setFontSize(25);    player_enemy1_money->setposition(tableStartposition_x+tableWIDth,tableStartposition_y-tableHeight/2*5);    addChild(player_enemy1_money);    LabelTTF *player_enemy1_strength = LabelTTF::create();    player_enemy1_strength->setString("+");	player_enemy1_strength->setAnchorPoint(ccp(0,0.5));    player_enemy1_strength->setFontSize(28);    player_enemy1_strength->setposition(tableStartposition_x+tableWIDth,tableStartposition_y-tableHeight/2*7);    addChild(player_enemy1_strength);}


基类做好了,我们就可以编写具体关卡场景类了,编写SeaScene


//继承自基类GameBaseSceneclass SeaScene: public GameBaseScene{public:    static Scene* createScene();      virtual bool init();       CREATE_FUNC(SeaScene);};#endif


//初始化方法需要调用基类的init方法bool SeaScene::init(){	if ( !GameBaseScene::init() )	{		return false;	}	return true;}//编写继承自父类的addMap方法voID GameBaseScene::addMap(){	_map = TMXTiledMap::create( "map/sea.tmx");	addChild(_map);}	

修改MapChooseSceneontouchended()方法,添加进入关卡场景代码,为了不至于进入场景太突然,我们添加了TransitionFadeBL场景切换动画


voID MapChooseScene::ontouchended(touch*touch,Event *unused_event){	Point endPoint = Director::getInstance()->convertToGL(touch->getLocationInVIEw());    float distance = endPoint.x - begintouchPoint.x;    if(fabs(distance) > touch_disTANCE)    {        adjustScrollVIEw(distance);    }else	{		if(currentPage == 2)		{			auto  scene = 	TransitionFadeBL::create(2,SeaScene::createScene());				Director::getInstance()->pushScene(scene);		}			}}


Ok,测试显示效果如图




点击下载代码

http://download.csdn.net/detail/lIDeguo1979/8272005


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

总结

以上是内存溢出为你收集整理的Cocos2d-x 3.2 大富翁游戏项目开发-第六部分 地图设计全部内容,希望文章能够帮你解决Cocos2d-x 3.2 大富翁游戏项目开发-第六部分 地图设计所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1023534.html

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

发表评论

登录后才能评论

评论列表(0条)

保存