#ifndef __T10TiledMap_H__
#define __T10TiledMap_H__
#include "cocos2d.h"
USING_NS_CC;
class T10TiledMap : public Layer
{
public:
T10TiledMap();
~T10TiledMap();
CREATE_FUNC(T10TiledMap);
bool init();
Vec2 GL2TiledMap(const Vec2& pos);
Vec2 TiledMap2GL(const Vec2& posInMap);
TMXTiledMap* _map;
};
#endif
<pre name="code" class="html">#include "T10TiledMap.h"
T10TiledMap::T10TiledMap()
{
}
T10TiledMap::~T10TiledMap()
{
}
bool T10TiledMap::init()
{
Layer::init();
//TMXTiledMap* tiledMap = TMXTiledMap::create("TileMaps/orthogonal-test2.tmx");
TMXTiledMap* tiledMap = TMXTiledMap::create("TileMaps/my.tmx");
_map = tiledMap;
addChild(tiledMap);
Size mapSize = tiledMap->getContentSize();
Size winSize = Director::getInstance()->getWinSize();
// tiledMap->setScale(winSize.width/mapSize.width, winSize.height/mapSize.height);
// 获取图层,设置loacalZOrder来改变渲染顺序
TMXLayer* layer = tiledMap->getLayer("Layer_0");
layer->setLocalZOrder(1);
// layer = tiledMap->getLayer("layer_1");
// layer->setLocalZOrder(100);
Sprite* sprite = Sprite::create("CloseNormal.png");
tiledMap->addChild(sprite);
sprite->setPosition(100, 100);
sprite->setLocalZOrder(10);
TMXObjectGroup* objGroup = _map->getObjectGroup("Objects");
ValueVector& objects = objGroup->getObjects();
for (auto it = objects.begin(); it != objects.end(); ++it)
{
Value& v = *it;
ValueMap& vm = v.asValueMap();
Value& name = vm["name"];
Value& x = vm["x"];
Value& y = vm["y"];
CCLOG("name =%s, x=%d, y=%d", name.asString().c_str(), x.asInt(), y.asInt());
}
//
// Sprite*sprite = layer->getTileAt(格子坐标);
auto ev = EventListenerTouchOneByOne::create();
ev->onTouchBegan = [&](Touch* touch, Event*)
{
Vec2 pos = touch->getLocation();
pos = _map->convertToNodeSpace(pos);
Vec2 posInMap = GL2TiledMap(pos);
TMXLayer* layer = _map->getLayer("Layer_0");
// layer->setTileGID(0, posInMap);
// layer->setTileGID(3, posInMap);
Sprite* sprite = layer->getTileAt(posInMap);
sprite->runAction(RepeatForever::create(JumpBy::create(.5f, Vec2(0, 0), 30, 1)));
return true;
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);
return true;
}
/* 格子的左下角转换成地图坐标 */
Vec2 T10TiledMap::TiledMap2GL(const Vec2& posInMap)
{
Size tileSize = _map->getTileSize();
Size contentSize = _map->getContentSize();
int x = posInMap.x * tileSize.width;
int y = posInMap.y * tileSize.height;
y = y + tileSize.height;
y = contentSize.height - 1 - y;
return Vec2(x, y);
}
Vec2 T10TiledMap::GL2TiledMap(const Vec2& pos)
{
Size tileSize = _map->getTileSize();
Size mapSize = _map->getMapSize();
// int x = pos.x / 格子宽度;
int x = pos.x / tileSize.width;
// int y = pos.y / 格子高度;
int y = pos.y / tileSize.height;
// y = 格子高度数量 - 1 - y;
y = mapSize.height - 1 - y;
return Vec2(x, y);
}