先吐槽下。。
本來,我們准備用tileMap來做地圖的,但發現一個問題,就是tileMap層中不能添加cc.Sprite,這導致了tileMap只適合做2D平面沒有遮擋的游戲,並且主角是不能有效率的進行播放動畫。
找到一個我類似問題的帖子,大家可以點擊這里看一下。
雖然這個問題導致了項目不考慮用tileMap了,但還是學到了點相關知識,下面分享出來這幾天的研究結果。
var size = cc.director.getWinSize(); var map = cc.TMXTiledMap.create(res.tmx_tmx); //獲取tmx this.addChild(map); var layer1 = map.getLayer("floor"); //得到指定圖層 var layer2 = map.getLayer("jianzhu"); var objects = map.getObjectGroup("duixiang"); //得到指定對象組 cc.log(layer2.properties.ni); //得到tmx編輯器對floor設置的屬性"ni"的值 cc.log(objects.properties["wo"]); //得到tmx編輯器對對象組duixiang設置的屬性"wo"的值,好像不推薦這樣的屬性表示方式,因為web混淆的時候可能有問題 var oneObject = objects.objectNamed("hero"); //得到對應對象組的一個指定對象 for(var i in oneObject){ cc.log(i+ " "+oneObject[i]); //打印hero對象屬性:name,type,x,y,width,height,nn(nn是在tmx設置的屬性)的值 } var gid = layer2.getTileGIDAt(cc.p(0,0)); //獲取指定圖層對應位置tile的gid,如果沒有tile,則返回0 var tileProperties = map.propertiesForGID(gid); //從map上得到指定gid上的屬性(這個屬性是在tmx編輯器里對tile編輯的屬性) cc.log(tileProperties.ff); //獲取自定義屬性 var tile = layer2.getTileAt(cc.p(0,0)); //得到選定的tile並讓它做action var action = cc.MoveBy.create(1,cc.p(50,-50)); tile.runAction(action); layer1.setTileGID(36,cc.p(3,0)); //在指定層上更改/設置指定位置的tile(根據tile的GID)