您好,登錄后才能下訂單哦!
- CCTMXTiledMap *map=CCTMXTiledMap::create("level1.tmx");
- this->addChild(map);
- CCTMXLayer *tmxlayer=map->layerNamed("walls");
- tmxlayer->setVisible(false);
CCTMXTiledMap類是用TMX文件名來初始化的,然后作為子節點被添加到當前層中
下一步是通過使用tileMap的layerNamed方法和在Tiled中應用過的層命名"walls",來獲取CCTMXLayer(也就是之前在Tiled中添加的游戲事件層),我們通過第四行 可以將地圖中的磚塊層隱藏掉
好了 運行程序 我們可以在手機上看到 地圖已經顯示了 但是你還不能去操作
接下來 我們需要判斷 是否按中了問號方塊
我們先將按下的坐標 轉換為tmx地圖的坐標
- CCPoint MainScene2::tilePosFromLocation(CCPoint touchpoint,
- CCTMXTiledMap *map) {
- // 觸摸的屏幕坐標必須減去瓷磚地圖的坐標 - 萬一瓷磚地圖位置已經不在(0,0)點上了
- CCPoint point = ccpSub(touchpoint, map->getPosition());
- // 將得到坐標值轉換成整數
- point.x = (int) (point.x / map->getTileSize().width);
- point.y = (int) ((map->getMapSize().height * map->getTileSize().height
- - point.y) / map->getTileSize().height);
- return point;
- }
轉換后的坐標就類似于 如圖
- void MainScene2::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) {
- CCNode *node = getChildByTag(TargetMap);
- CCTMXTiledMap *map = (CCTMXTiledMap*) node;
- CCPoint touchpoint = CCDirector::sharedDirector()->convertToGL(
- pTouch->getLocationInView());
- CCPoint mappoint = tilePosFromLocation(touchpoint, map);
- CCLog("mappoint.x=%f,mappoint.y=%f", mappoint.x, mappoint.y);
- bool isTouchOnWall = false;
- CCTMXLayer *maplayer = map->layerNamed("walls");
- int tileGID = maplayer->tileGIDAt(mappoint);
- CCLog("tileGID=%i", tileGID);
- if (tileGID != 0) {
- CCDictionary *properties = map->propertiesForGID(tileGID);
- if (properties) {
- CCString *isQuesWall = (CCString*) (properties->objectForKey(
- "isQues"));
- isTouchOnWall = isQuesWall->boolValue() == true;
- }
- }
- CCLabelTTF *label=(CCLabelTTF*)(getChildByTag(TargetLabel));
- if(isTouchOnWall){
- label->setString("按下問號磚塊");
- }else{
- label->setString("未按到問號磚塊");
- }
- }
首先 我們來解釋下上面的代碼
3-4行:通過tag 獲取CCTMXTiledMap節點;
6行:獲取按下的坐標點 并轉換為以左下角為原點的坐標;
8行:將按下的坐標 轉換為tmx坐標地圖
11行:用于存儲是否按到了問號磚塊
13行:獲取tmx地圖集中的walls層
14行:獲取按下坐標所對應的瓷磚的gid (利用CCTMXLayer的tileGIDAt方法,你可以獲取指定坐標上瓷磚的GID編號。)
18行:CCTMXTiledMap有一個叫做propertiesForGID方法,如果指定GID編號的瓷磚附帶屬性的話,此方法會返回一個CCDictionary字典。這個NSDictionary字典包含了在Tiled中為瓷磚添加的屬性。字典的鍵/值都是用CCString對象存儲的。
CCDictionary的每一個屬性都可以通過它的valueForKey方法來獲取,返回的是一個CCString對象。要從一個CCString對象中獲取布爾值,你可以使用CCString的boolValue方法;而要獲取整數或者浮點數,你可以使用CCString的intValue或者floatValue方法。 |
如果你需要在地圖上修改單個瓷磚,你可以使用removeTileAt和setTileGID這兩個方法。在游戲過程中,前者會移除指定層上的瓷磚,后者則會替換指定層上瓷磚:
- maplayer->removeTileAt(mappoint);
- maplayer->setTileGID(tileGID,mappoint);
-------------------------
map->getTileSize():當個瓷磚的大小
map->getMapSize():指橫豎瓷磚的塊數
滾動瓷磚地圖
實際上我們可以很輕松的實現地圖的滾動,因為我們只需要讓CCTMXTiledMap移動就可以了。
以后基本都是講解實例 一個Demo寫完之后就寫一個教程,前兩天接了個項目,所以沒怎么研究cc2dx
本教程根據Cocos2d教程翻譯過來
使用的cocos2d-x版本為2.02
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。