首页 > 代码库 > CCTMXTiledMap的使用
CCTMXTiledMap的使用
1 CCTMXTiledMap的使用
TileMap.h |
#ifndef__T23TileMap_H__ #define__T23TileMap_H__
#include"cocos2d.h" USING_NS_CC;
classTileMap :publicCCLayer { public: CREATE_FUNC(TileMap); boolinit(); staticCCScene *scene();
CCTMXTiledMap*_map; CCPointPoint2Tile(CCPointptGL); CCPointTile2PointLB(CCPointptTile);
boolccTouchBegan(CCTouch *pTouch,CCEvent *pEvent); };
#endif |
TileMap.cpp |
#include"TileMap.h"
CCScene *TileMap::scene() { CCScene *scene =CCScene::create(); TileMap *layer =TileMap::create(); scene->addChild(layer); returnscene; }
boolTileMap::init() { CCScene *scene =CCScene::create(); //初始化TMXTiledMap,要用一个.tmx CCTMXTiledMap *map =CCTMXTiledMap::create("Round1.tmx"); addChild(map);
//获得CCTMXLayer的层:layer_0 CCTMXLayer*layer =map->layerNamed("layer_0"); //通过tileAt的方式获得格子,每个格子是一个精灵 CCSprite*sprite =layer->tileAt(ccp(2,2)); //通过tileGIDAT的方式获得gid的值 intgid =layer->tileGIDAt(ccp(2,2)); //让被选中的精灵跳动一下 sprite->runAction(CCJumpBy::create(200,ccp(0, 0), 50, 1000));
//将地图缩放 map->setScale(.5f); layer->setTileGID(3,ccp(3,3));
_map =map;
setTouchEnabled(true); //设置触摸方式 setTouchMode(kCCTouchesOneByOne);
CCSprite*sprite1 =CCSprite::create("anchor3.png"); _map->addChild(sprite1); sprite1->setZOrder(1000);
sprite1->setPosition(Tile2PointLB(ccp(3, 2))); sprite1->setAnchorPoint(ccp(0,1));
sprite1->setPosition(Tile2PointLB(ccp(3, 2))); sprite1->setAnchorPoint(ccp(0,1));
returntrue; }
//将世界坐标转换成格子坐标 CCPointTileMap::Point2Tile(CCPointptGL) { //获得每个格子的宽度 intdx =_map->getTileSize().width; //设置每个格子的高度 intdy =_map->getTileSize().height;
//将ptGL世界坐标转换成为本地坐标 CCPointptMap =_map->convertToNodeSpace(ptGL); //x轴方向的格子数 intx =ptMap.x / dx; //这里如果是最左下角算的的值是0,如果y轴上有2个格子,实际的格子的y是1 inty =ptMap.y / dy; //y方向上的总格子数 - 1 - y y =_map->getMapSize().height - 1 - y;
returnccp(x,y); }
//将格子坐标转换成为世界坐标 CCPointTileMap::Tile2PointLB(CCPointptTile) { //这里的getMapSize().height不是像素值,而是y方向上的格子数 ptTile.y = _map->getMapSize().height - 1 - ptTile.y;
returnccp(ptTile.x * _map->getTileSize().width, ptTile.y * _map->getTileSize().height); }
boolTileMap::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent) { //获得被选中的坐标值 CCPointpt =pTouch->getLocation();
CCPointptTile =Point2Tile(pt); _map->layerNamed("layer_0")->setTileGID(0,ptTile);
returntrue; } |
运行结果: |
CCTMXTiledMap的使用