最近我正在使用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任何人都可以帮助我吗?
答案 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修改每个对象。这是一种简单的方法......