在Cocos2d-X中使用瓦片地图《一》

在Cocos2d-X中使用瓦片地图《一》,第1张

概述我在上一篇博客中介绍了使用地图编辑器创建瓦片地图:http://www.voidcn.com/article/p-brgdymtl-za.html 在这篇博客中将详细介绍瓦片地图在Cocos2d-X中的应用 先使用地图编辑器创建一个瓦片地图 保存好编辑的瓦片地图后会用一个tmx文件,打开tmx文件后会看到tmx文件其实是一个XML文件 上面编辑的瓦片地图的tmx文件中的内容: <?xml vers

我在上一篇博客中介绍了使用地图编辑器创建瓦片地图:http://www.jb51.cc/article/p-brgdymtl-za.html

在这篇博客中将详细介绍瓦片地图在Cocos2d-X中的应用

先使用地图编辑器创建一个瓦片地图


保存好编辑的瓦片地图后会用一个tmx文件,打开tmx文件后会看到tmx文件其实是一个XML文件

上面编辑的瓦片地图的tmx文件中的内容:

<?xml version="1.0" enCoding="UTF-8"?><map version="1.0" orIEntation="orthogonal" wIDth="12" height="12" tilewIDth="101" tileheight="81"> <tileset firstgID="1" source="orthogonal-test1.tsx"/> <layer name="Layer 0" wIDth="12" height="12">  <data enCoding="base64" compression="zlib">   eJxjYBgFQwkIYsH4gDYWjA+oYsH4AACWOAHm  </data> </layer></map>


代码解释:

version = "1.0"
地图的版本

enCoding = "UTF-8

//地图的编码方式

orIEntation = "orthogonal"
//地图的方向

wIDth = "12"
//地图中x方向上图块的个数

height = "12"
//地图中y方向上图块的个数

tilewIDth = "101"
地图中每个图块的宽度

tileheight = "81"

地图中每个图块的高度

source="orthogonal-test1.tsx"
//地图的源文件

layer name="Layer 0"

图层


添加下面的代码:

 //创建地图    CCTMXTiledMaP* map = CCTMXTiledMap::create("orthogonal-test1.tmx");    addChild(map);

执行结果:


瓦片地图的应用1:点击砖块砖块会变成宝箱

在制作这个小程序前需要知道一些知识点:

1、窗口的坐标原点位于窗口的左下角

2、地图的坐标原点位于地图的左上角

3、所以在设计创新时需要将地图的坐标转换成窗口坐标

通过图片可知图中的点在窗口上的x坐标和地图上的x坐标一样

图中点在窗口上的y坐标=瓦片地图的高度-点在瓦片地图中的y坐标

实现代码:

#include "TmxMapBasic.h"CCScene* TmxMapBasic::scene(){	CCScene* s = CCScene::create();	TmxMapBasic* layer = TmxMapBasic::create();	s->addChild(layer);	return s;}bool TmxMapBasic::init(){    cclayer::init();	CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //创建地图    CCTMXTiledMaP* map = CCTMXTiledMap::create("orthogonal-test1.tmx");    addChild(map);    _map = map;    //注册触摸	settouchEnabled(true);	settouchMode(kCCtouchesOneByOne);	return true;}//触摸响应函数bool TmxMapBasic::cctouchBegan(CCtouch* touch,CCEvent*){    //得到触摸点的坐标    CCPoint ptLocation = touch->getLocation();    //ptLcocation -> 在tmx地图里的坐标    //获取地图中每个图块的大小    CCSize tileSize = _map->getTileSize();    //获得地图中图块的个数    CCSize mapSize = _map->getMapSize();    CCPoint ptInMap;    //获取触摸点在地图中的坐标    ptInMap.y = mapSize.height * tileSize.height - ptLocation.y;    ptInMap.x = ptLocation.x;    //获取触摸点在窗口中的坐标   	int tx = ptInMap.x / tileSize.wIDth;	int ty = ptInMap.y / tileSize.height;    //通过图层名称获取地图对象	CCTMXLayer* layer0 = _map->layernamed("Layer 0");    //设置瓷砖的编号0表示隐藏瓷砖	layer0->setTileGID(9,ccp(tx,ty));	return true;}

执行结果:

瓦片地图的应用2:点击砖块砖块会变成宝箱宝箱跳跃

程序代码:

#include "TmxMapBasic.h"CCScene* TmxMapBasic::scene(){	CCScene* s = CCScene::create();	TmxMapBasic* layer = TmxMapBasic::create();	s->addChild(layer);	return s;}bool TmxMapBasic::init(){    cclayer::init();	CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //创建地图    CCTMXTiledMaP* map = CCTMXTiledMap::create("orthogonal-test1.tmx");    addChild(map);    _map = map;    //注册触摸	settouchEnabled(true);	settouchMode(kCCtouchesOneByOne);	return true;}//触摸响应函数bool TmxMapBasic::cctouchBegan(CCtouch* touch,ty));        //使用点中位置的图片创建精灵    CCSprite* sp = layer0->tileAt(ccp(tx,ty));        //设置精灵跳跃    CCAction* action = CCJumpBy::create(3,ccp(0,0),30,5);        //执行跳跃动作    sp->runAction(action);	return true;}

执行结果:



 总结

以上是内存溢出为你收集整理的在Cocos2d-X中使用瓦片地图《一》全部内容,希望文章能够帮你解决在Cocos2d-X中使用瓦片地图《一》所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存