91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【cocos2d-x】瓷磚地圖(TileMap)基礎知識

發布時間:2020-06-05 19:24:12 來源:網絡 閱讀:6470 作者:包灬子 欄目:游戲開發
在瓷磚地圖游戲里,游戲圖形由叫做“瓷磚”(tiles)的一小組圖片相互排列組成。這些圖片被放置在一個網格中,得到的效果就是令人信服的游戲世界。瓷磚地圖的概念非常吸引人,因為你可以節省內存而不必使用很多貼圖渲染整個世界,同時還可以有很多不同的組合。

 

本章將會使用最簡單的一種瓷磚地圖:90度角瓷磚地圖(Orthogonal Tilemaps),介紹瓷磚地圖的一般概念。它們是用正方形或長方形的瓷磚組成的,通常以從上到下的視角展示游戲世界。
 

Tiled Map Editor(瓷磚地圖編輯器)
最出名的用于生成cocos2d-x中可用的瓷磚地圖的編輯器叫做 Tiled Map Editor(在此我簡稱它為 Tiled)。cocos2d-x游戲引擎原生支持 Tiled 生成的TMX文件。Tiled是免費的,官方網站http://www.mapeditor.org/
 
好像2.02的源碼中地圖加載模塊有問題  請替換 :點我下載  
下載之后替換到cocos2dx下的tilemap_parallax_nodes里面的代碼刪除  解壓出來的代碼放入文件夾
 
要在cocos2d-x中使用TMX格式的瓷磚地圖,首先必須把TMX文件和它所引用的瓷磚集圖片文件作為資源添加到自己項目中。 在本例子中  我們將level1.tmx和tileSet.png加入到我們的項目中   
素材下載:點我下載
在代碼里加載和顯示瓷磚地圖非常方便,以下代碼來自MainScene2類的init方法: 
  1. CCTMXTiledMap *map=CCTMXTiledMap::create("level1.tmx"); 
  2. this->addChild(map); 
  3. CCTMXLayer *tmxlayer=map->layerNamed("walls"); 
  4. tmxlayer->setVisible(false); 

CCTMXTiledMap類是用TMX文件名來初始化的,然后作為子節點被添加到當前層中

下一步是通過使用tileMap的layerNamed方法和在Tiled中應用過的層命名"walls",來獲取CCTMXLayer(也就是之前在Tiled中添加的游戲事件層),我們通過第四行  可以將地圖中的磚塊層隱藏掉

好了   運行程序 我們可以在手機上看到  地圖已經顯示了  但是你還不能去操作

【cocos2d-x】瓷磚地圖(TileMap)基礎知識

接下來 我們需要判斷  是否按中了問號方塊

我們先將按下的坐標  轉換為tmx地圖的坐標

  1. CCPoint MainScene2::tilePosFromLocation(CCPoint touchpoint, 
  2.         CCTMXTiledMap *map) { 
  3.     // 觸摸的屏幕坐標必須減去瓷磚地圖的坐標 - 萬一瓷磚地圖位置已經不在(0,0)點上了 
  4.     CCPoint point = ccpSub(touchpoint, map->getPosition()); 
  5.  
  6.     // 將得到坐標值轉換成整數 
  7.     point.x = (int) (point.x / map->getTileSize().width); 
  8.     point.y = (int) ((map->getMapSize().height * map->getTileSize().height 
  9.             - point.y) / map->getTileSize().height); 
  10.  
  11.     return point; 

轉換后的坐標就類似于   如圖

【cocos2d-x】瓷磚地圖(TileMap)基礎知識

  1. void MainScene2::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { 
  2.  
  3.     CCNode *node = getChildByTag(TargetMap); 
  4.     CCTMXTiledMap *map = (CCTMXTiledMap*) node; 
  5.  
  6.     CCPoint touchpoint = CCDirector::sharedDirector()->convertToGL( 
  7.             pTouch->getLocationInView()); 
  8.     CCPoint mappoint = tilePosFromLocation(touchpoint, map); 
  9.     CCLog("mappoint.x=%f,mappoint.y=%f", mappoint.x, mappoint.y); 
  10.  
  11.     bool isTouchOnWall = false
  12.  
  13.     CCTMXLayer *maplayer = map->layerNamed("walls"); 
  14.     int tileGID = maplayer->tileGIDAt(mappoint); 
  15.  
  16.     CCLog("tileGID=%i", tileGID); 
  17.     if (tileGID != 0) { 
  18.         CCDictionary *properties = map->propertiesForGID(tileGID); 
  19.         if (properties) { 
  20.             CCString *isQuesWall = (CCString*) (properties->objectForKey( 
  21.                     "isQues")); 
  22.             isTouchOnWall = isQuesWall->boolValue() == true
  23.         } 
  24.     } 
  25.  
  26.     CCLabelTTF *label=(CCLabelTTF*)(getChildByTag(TargetLabel)); 
  27.     if(isTouchOnWall){ 
  28.         label->setString("按下問號磚塊"); 
  29.     }else
  30.         label->setString("未按到問號磚塊"); 
  31.     } 

首先 我們來解釋下上面的代碼

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這兩個方法。在游戲過程中,前者會移除指定層上的瓷磚,后者則會替換指定層上瓷磚:

  1. maplayer->removeTileAt(mappoint); 
  2. maplayer->setTileGID(tileGID,mappoint); 

-------------------------

map->getTileSize():當個瓷磚的大小

map->getMapSize():指橫豎瓷磚的塊數


滾動瓷磚地圖

 實際上我們可以很輕松的實現地圖的滾動,因為我們只需要讓CCTMXTiledMap移動就可以了。


以后基本都是講解實例 一個Demo寫完之后就寫一個教程,前兩天接了個項目,所以沒怎么研究cc2dx

 

本教程根據Cocos2d教程翻譯過來

使用的cocos2d-x版本為2.02

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌拉特后旗| 阿拉善右旗| 禄丰县| 高雄县| 四平市| 和林格尔县| 铁岭县| 漳州市| 龙泉市| 禄劝| 沧州市| 科技| 平顶山市| 建德市| 台中县| 蒙自县| 寿光市| 汤原县| 普兰县| 颍上县| 德化县| 上高县| 峨眉山市| 新绛县| 土默特右旗| 邵阳县| 兴海县| 西藏| 花莲市| 富蕴县| 沿河| 楚雄市| 民丰县| 宜宾市| 察雅县| 合江县| 玉环县| 磐石市| 勐海县| 镇平县| 琼中|