Сравнение значений - нет доступа к атрибуту имени объекта - PullRequest
2 голосов
/ 06 августа 2020

Я пытаюсь модифицировать 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();
    }
});

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...