CCTMXTiledMap的使用
1 CCTMXTiledMap的使用
| TileMap.h |
| #ifndef __T23TileMap_H__ #define __T23TileMap_H__ ? #include "cocos2d.h" USING_NS_CC; ? class TileMap :public CCLayer { public: ??? CREATE_FUNC(TileMap); ??? bool init(); ??? static CCScene * scene(); ? ??? CCTMXTiledMap* _map; ??? CCPoint Point2Tile(CCPoint ptGL); ??? CCPoint Tile2PointLB(CCPoint ptTile); ? ??? bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); }; ? #endif |
| TileMap.cpp |
| #include "TileMap.h" ? CCScene * TileMap::scene() { ??? CCScene * scene = CCScene::create(); ??? TileMap * layer = TileMap::create(); ??? scene->addChild(layer); ??? return scene; } ? bool TileMap::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的值 ??? int gid = 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); ??? //設(shè)置觸摸方式 ??? 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)); ? ??? return true; } ? //將世界坐標轉(zhuǎn)換成格子坐標 CCPoint TileMap::Point2Tile(CCPoint ptGL) { ??? //獲得每個格子的寬度 ??? int dx = _map->getTileSize().width; ??? //設(shè)置每個格子的高度 ??? int dy = _map->getTileSize().height; ? ??? //將ptGL世界坐標轉(zhuǎn)換成為本地坐標 ??? CCPoint ptMap = _map->convertToNodeSpace(ptGL); ??? //x軸方向的格子數(shù) ??? int x = ptMap.x / dx; ??? //這里如果是最左下角算的的值是0,如果y軸上有2個格子,實際的格子的y是1 ??? int y = ptMap.y / dy; ??? //y方向上的總格子數(shù) - 1 - y ??? y = _map->getMapSize().height - 1 - y; ? ??? return ccp(x,y); } ? //將格子坐標轉(zhuǎn)換成為世界坐標 CCPoint TileMap::Tile2PointLB(CCPoint ptTile) { ??? //這里的getMapSize().height不是像素值,而是y方向上的格子數(shù) ??? ptTile.y = _map->getMapSize().height - 1 - ptTile.y; ? ??? return ccp(ptTile.x * _map->getTileSize().width, ??????? ptTile.y * _map->getTileSize().height); } ? bool TileMap::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { ??? //獲得被選中的坐標值 ??? CCPoint pt = pTouch->getLocation(); ? ??? CCPoint ptTile = Point2Tile(pt); ??? _map->layerNamed("layer_0")->setTileGID(0, ptTile); ? ??? return true; } |
| 運行結(jié)果:
|
?
總結(jié)
以上是生活随笔為你收集整理的CCTMXTiledMap的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李泌个人资料
- 下一篇: 我的世界指令代码改创造(我的世界指令大全