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就是获取上面的数组
相关文章推荐
- Cocos格子地图(2)
- Cocos格子地图(1)
- cocos2dx的数据保存之UserDault
- cocos2dx+lua注册事件函数详解
- Cocos2d-x移植android增加震动效果
- cocos2d-lua 下使用protobuffer
- cocos2d_lua播放动画
- cocos2d-x自制工具07:打印cocos2d-x的节点树
- cocos2dx 压缩图片的网站/工具
- 个人初做小游戏RunRunMagic(五) 总结
- cocos模拟器已经启动 但是不能访问6010端口
- class() 高级用法 --cocos2dx- lua
- Cocos2dx 3.x的android studio项目之间.so库、资源移植
- cocos2d-x 3.x DrawNode的使用
- mac下创建cocos2d-x的android项目详细流程
- cocos2d-x3.0 macOS下配置Android开发环境以及使用cocos2d-console来新建执行project
- Cocos2d-x 3.0中 物理碰撞检测中onContactBegin回调函数不响应问题
- 骨骼动画中为每个骨骼设置单独的颜色
- cocos2dx CCArray
- cocos2dx抗锯齿与渲染冲突——待解决