您的位置:首页 > 移动开发 > Cocos引擎

Cocos格子地图(3)

2016-04-16 14:40 435 查看

地图对象层

就是一些依附于地图的对象所在的层,如下:

其中的小方框就是对象,这些对象在游戏时理解为小怪和马里奥出现的位置和活动区间

在.tmx中:

<objectgroupname="objects"width="228"height="14">
<objectname="enemy"type="mushroom"x="648"y="176"/>
<objectname="enemy"type="mushroom"x="824"y="176"/>
<objectname="mushroom"type="MushroomReward"x="336"y="128">
<properties>
<propertyname="isMushroomReward"value="1"/>
</properties>
</object>
ObjectGroup是对象层,有名字。其中的对象object有自己的名字,类型位置等属性(有的还有Property)

使用方法:

map= TMXTiledMap::create("MarioMap1.tmx");
addChild(map); //创建地图

TMXObjectGroup * objGroup =map->getObjectGroup("objects");//获取对象层
ValueVector& vv =objGroup->getObjects();//获取对象组——由ValueVector保存

for (auto it = vv.begin(); it!= vv.end(); ++it)
{
// v对应的是一个<object name="enemy" type="mushroom"x="648" y="176"/>
//<object name="enemy" type="mushroom" x="648"y="176"/>在cocos中,叫作字典,keyMap
//ValueMap结构
Value& v = *it;
ValueMap& vm =v.asValueMap();
std::string& type = vm["type"].asString();

if (type ==
"BirthPoint")//找到马里奥出生位置
{
int x = vm["x"].asInt();
int y = vm["y"].asInt();
CCLOG("x=%d,y=%d", x,y);
//放上马里奥
Sprite* mario =
Sprite::create("smallWalkRight.png",
Rect(0, 0, 14, 16));
map->addChild(mario); mario->setPosition(x, y-16);
mario->setLocalZOrder(100);
mario->setAnchorPoint(Vec2(0, 0));
}
}

对象层配套数据结构:

ValueVector中存放着Value,每个Value就和标准库的map一样,,有key有value,Value有很多as…函数,如上面用到的asMap,都是封装好的便于转换类型的方法。这里我们用了asMap转成ValueMap(就可以以map的下标放式用key取值了),可以看到ValueMap也有很多as函数,这样非常方便使用。

对象层都用的是&引用类型,表示也可以对文件作出变更(只是内存中的.tmx)

.tmx中的的x和y都是UI坐标系的,原点左上角。但是当我们用asInt之类的as函数时自动将坐标转成了GL坐标——左下角

TileMap源码

TMXTileMap继承于Node,有两个create函数,一个是create()用.tmx做参数,一个是createWithXML用xml做参数。

getProperty()获取地图属性,tmx文件中了可以存储很多东西

getPropertiesForGId图块属性

getMapOrientation获取地图方向(是90度还是45度

getProperties返回一个&ValueMap

TMXMapInfo类,负责解析tmx文件,在我们create 了之后就会将信息放入TMXMapInfo

TMXLayer类继承于SpriteBatchNode——批处理精灵。说明每层都有必须相同的图块来源才行。通常我们不用它的create函数,常常Layer是获取得到的。其中方法如下:

setTileGID可以设置格子的GID,之后可以随意修改格子的内容图片为其他格子图(将GID置为0
表示让这个精灵消失)


getPositionAt(Vec2&tileCoordinate)从格子坐标转像素坐标

getProperty获取层属性

setupTiles创建精灵安装格子的过程

_tiles:uint32_t* _tiles; 用1唯数组形式保存了二维的格子的GID(如二维数组s[2][3],转成1唯m[6])

getTiles就是获取上面的数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: