关于这件事,我正在编写脚本,遇到了一个问题,就是我什么地方都没看,而且我还没有尝试过修复它,这是我要做的事情的简要介绍:
我正在为我正在制作的游戏中的战斗系统编程一个管理器,它会创建一个具有某些属性的对象,并具有其所需的信息,以便能够检查状态是否仍然有效。这是对象的结构以及创建对象的函数:
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是的for(...)部分当前正在查看的主要对象中的当前对象。)
问题是“检查/删除过期状态”根本不起作用,而且我还无法弄清楚如何使它起作用,有关删除状态的部分起作用了,仅仅是代码不会遍历statesobj对象内的每个对象并从该对象内的每个状态对象获取所需的值,你们中的任何人都知道我该怎么做? (引擎是rpg maker mv,但它使用的是javascript。)