Как получить значения из объектов внутри объекта - PullRequest
0 голосов
/ 14 марта 2019

Итак, во время написания сценариев я столкнулся с проблемой, которую нигде не видел, и ничего из того, что я пробовал, еще не устранило это, вот краткое изложение того, что я пытаюсь сделать:

Я программирую менеджера для системы сражений в создаваемой мной игре, он создает объект с определенными свойствами и информацией, необходимой ему для того, чтобы можно было проверить, действует ли состояние по-прежнему.это структура объекта и функция, которая создает объекты:

function state(sId, mId, trns, trn){ 
    this.stateId = sId
    this.memberId = mId
    this.turns = trns
    this.turn = trn
}

function makeState(n, sId, mId, trns, trn) {
    var states = {}
    for (var i = 0; i < n; ++i) {
        states[i] = new state(sId, mId, trns, trn)
    }
    return states
}

Это функция, которая вызывается в игровом движке всякий раз, когда к одному из участников битвы добавляется состояние ($gameVariables.value (197) возвращает что-то вроде 1 * 1 * 1 * 1 * 1, $ gameVariables.value (196) возвращает число выше 0):

    $.updateStates = function() {
    if ($gameVariables.value(197) != 0){
        var listCreated = false;
        var unformatedData = $gameVariables.value(197);
        var stateData = unformatedData.split("*");
        console.log(stateData);
    }

    if (listCreated == false){
        if ($gameVariables.value(197) != 0){
            var statesobj = makeState(stateData[0], stateData[1], stateData[2], stateData[3], stateData[4]);
            $gameVariables.setValue(197, 0);
            listCreated = true;
            console.log(statesobj);
        }
    } else {
        if ($gameVariables.value(197) != 0){
            statesobj.push(makeState(stateData[0], stateData[1], stateData[2], stateData[3], stateData[4]));
            $gameVariables.setValue(197, 0);
        }

        for (Object.entries(statesobj)) { //check/remove expired states
            console.log(p);
            if ((p.turns + p.turn) <= $gameVariables.value(196)){
                $gameParty.members()[p.memberId - 1].removeState(p.stateId);
                statesobj.splice(p, 1);
            }
        }
    }
};

( note «проверка / удаление просроченных состояний» полностью испорчена, я пробовал несколько вещей, и это не работает для справки, в этой части кода P будет текущий объект в главном объекте, который для(...) часть этого в настоящее время рассматривается.)

Проблема в том, что «проверка / удаление состояний с истекшим сроком действия» вообще не работает, и я не смог выяснить, какзаставить его работать, часть об удалении состояний работает, просто код не будет проходить через каждый объект в объекте statesobj и получать необходимые значения от каждого объекта состояния в этом объекте, любой из вас знает, как я это сделаюбуду делать это?(движок - rpg maker mv, но он использует javascript.)

...