瓦片地图中的 GID

GID in Tile Map

最近我正在使用 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 谁能帮帮我?

我遇到了同样的问题。我不知道一个好的解决方案,但我只是通过使用文本编辑器打开 .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。就像我说的,这不是一个很好的解决方案,但在有人可以用更好的解决方案做出回应之前,它会一直有效。

@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

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