Я пытаюсь модифицировать javascript игру. В нем есть различные объекты, такие как спрайты, плитки, предметы и т. Д. c. До сих пор мне удалось сравнить значение name
спрайта, чтобы изменить звук, который генерируется при взаимодействии с ним.
ie:
after('startDialog', function () { //works
if (sprite[id].name === "cat")
sounds.meow();
else if (sprite[id].name === "bully1")
sounds.punch();
else if (sprite[id].name === "bully2")
sounds.gunshot();
else
sounds.birdrobin();
});
Проблема возникает, когда я пытаюсь взаимодействовать с предметами. Один и тот же код на них не работает ...
after('onInventoryChanged', function () { //does not work
if (item[id].name === "smokes"){
sounds.lighter();
} else {
sounds.birdrobin();
}
});
Единственная разница между элементами и спрайтами в том, что спрайты уникальны, у вас не может быть двух спрайтов с одинаковым атрибутом name
. С другой стороны, у вас может быть столько же элементов с одним и тем же name
, сколько вам нравится.
Но я заблуждаюсь, так как и спрайты, и объекты «генерируются» одним и тем же кодом, и я должен быть также может получить доступ к переменной name в элементах ...
function parseItem(lines, i) {
var id = getId(lines[i]);
var drwId = null;
var name = null;
//item data
item[id] = {
id : id,
drw : drwId, //drawing id
col : colorIndex,
dlg : dialogId,
name : name
};
return i;
}
function parseSprite(lines, i) {
var id = getId(lines[i]);
var drwId = null;
var name = null;
//sprite data
sprite[id] = {
id : id,
drw : drwId, //drawing id
col : colorIndex,
dlg : dialogId,
inventory : startingInventory,
name : name
};
return i;
}
Любая помощь будет приветствоваться, так как я застрял здесь последние несколько дней.
Если я могу предоставить любую дополнительную информацию, не стесняйтесь спрашивать. Я просто не хочу загромождать вопрос с самого начала.
Edit 1:
item[id].name
используется для рисования объектов на холсте, поэтому Я должен получить к нему доступ ...
for (id in item) {
worldStr += "ITM " + id + "\n";
worldStr += serializeDrawing( "ITM_" + id );
if (item[id].name != null && item[id].name != undefined) {
/* NAME */
worldStr += "NAME " + item[id].name + "\n";
}
if (item[id].dlg != null) {
worldStr += "DLG " + item[id].dlg + "\n";
}
if (item[id].col != null && item[id].col != undefined && item[id].col != 2) {
/* COLOR OVERRIDE */
worldStr += "COL " + item[id].col + "\n";
}
worldStr += "\n";
}
Изменить 2:
Я сделал немного "прогресс" . Теперь onInventoryChange
действительно генерирует звук, но не тот. У меня есть предмет с названием «дымит» и у меня есть предмет с названием «пиво». Звук, который генерируется, находится в разделе else
, даже когда я взаимодействую с дымом и пивом ...
after('onInventoryChanged', function () {
if (item.name === "smokes"){
sounds.lighter();
} else if (item.name === "beer") {
sounds.bottleCap();
} else {
sounds.birdrobin();
}
});
Спасибо