首页 > 代码库 > 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个格子,实际的格子的y1

   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的使用