Tile Map中的GID

时间:2016-07-23 18:06:20

标签: javascript phaser-framework

最近我正在使用Phaser.js开发一款游戏,我已经开始需要我的瓷砖地图对象了,我来看看video

唯一的问题是“sprites make objects”看到这个example,这个方法用的是map:

map.createFromObjects('Object Layer 1', 34, 'coin', 0, true, false, coins);

其中34是“gid”...如何将此值添加到JSON?因为在创建tilemap和对象时,没有为对象分配“gid”。我是否必须手动设置._。 ?

我使用Tiled Map Editor任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我不知道一个很好的解决方案,但我只是通过使用文本编辑器打开.json文件手动添加gid。寻找说

的东西
"name":(Your object layer name),
"objects":[
   {
     first object properties...
   },
   {
     second object properties...
   }

现在,对于要分配gid的每个对象,请将此文本添加到其顶部的属性中。

"gid":(Desired gid),

将逗号放在最后是很重要的。 以下是一个例子:

 "name":"mainObjects",
 "objects":[
        {
         "gid":34,
         "height":32,
         "id":6,
         "name":"",
         "properties":
            {

            },
         "rotation":0,
         "type":"fire",
         "visible":true,
         "width":32,
         "x":352,
         "y":1248
        },
        {
         "gid":34,
         "height":32,
         "id":7,
         "name":"",
         "properties":
            {

            },
         "rotation":0,
         "type":"fire",
         "visible":true,
         "width":32,
         "x":384,
         "y":1248
        }],

注意我为每个对象添加了“gid”属性,并为其赋值34,这个值可以是你想要的任何值。

现在这会很烦人,因为每次导出平铺地图时,都会移除gid。就像我说的那样,这不是一个很好的解决方案,但它会有效,直到有人能用更好的方式做出回应。

答案 1 :(得分:1)

@weastie是的,这是一个可以接受的解决方案。但是,如果我有20或100个物体可能会受到折磨。我已经找到了一个解决方案就是这个,也许你可以在这个时刻为你和其他人服务。

function create() {
  ...
  map = game.add.tilemap('map');
  map.addTilesetImage('ground_1x1');
  map.addTilesetImage('walls_1x2');
  map.addTilesetImage('tiles2');
  ...
  map.objects.Objects.forEach(function(element) {
     element.gid = 34;
  }, this); 
  ...   
  map.setCollisionBetween(1, 12);

  layer = map.createLayer('Tile Layer 1');

  layer.resizeWorld();
  map.createFromObjects('Object Layer 1', 34, 'coin', 0, true, false, coins);
 }
  

map.objects

是具有对象数组的对象("对象层1")。您所要做的就是访问数组名称并使用foreach修改每个对象。这是一种简单的方法......