萬惡的tileMap


先吐槽下。。

本來,我們准備用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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM