Я пытаюсь добавить объекты интерактивных изображений на сцену из массива объектов, полученных из JSON.
Например, у меня есть этот JSON:
{
"graph": {
"nodes": [
{"name":"Catharsis", "type":"city", "x":500, "y":200},
{"name":"Arrakeen", "type":"city", "x":300, "y":400},
{"name":"Mine_1", "type":"facility","x":150, "y":450},
{"name":"Belgorod", "type":"city", "x":700, "y":500}
],
"paths": [
{"from":"Arrakeen", "to":"Belgorod"},
{"from":"Arrakeen", "to":"Mine_1"},
{"from":"Arrakeen", "to":"Catharsis"}
]
}
}
Узлы - это местоположения, такие как города и объекты.
Этот JSON загружается как объект JS в mapData
Затем этот JS рисует объекты в сцене:
preload(){
this.load.image('city','img/locations/city.png');
this.load.image('facility','img/locations/facility.png');
}
create(){
mapData.graph.paths.forEach(path => {
var nodesFrom = mapData.graph.nodes
.find(node => {
return node.name == path.from
}, path);
var nodesTo = mapData.graph.nodes
.find(node => {
return node.name == path.to
}, path);
this.add.line(0, 0, nodesFrom.x, nodesFrom.y, nodesTo.x, nodesTo.y, 0x000000, 1)
.setOrigin(0, 0);
}, this);
mapData.graph.nodes.forEach(node => {
this.add.image(node.x,node.y,node.type)
.setInteractive()
.setScale(0.2);
this.add.text(node.x,node.y,node.name,{fontSize:20,color:'#000'})
.setOrigin(0.5, 0.3);
this.input.on('gameobjectdown',this.onObjectClicked);
}, this);
}
И вот результирующая сцена:
Но я хочу показать контекстное меню действий при нажатии на один из городов или объектов. Со списком пунктов меню сформирован условно. Например, Move to [city.name]
и т. Д. Но теперь все интерактивные объекты отправляют события щелчка при нажатии, поэтому мне нужно как-то однозначно идентифицировать добавленные изображения. Может быть, добавить ключ, равный имени узла, но как? И как это потом читать?