我正在研究最终幻想ATB战斗系统,目前我正在尝试实现"急速功能"。匆忙将使您在3秒钟内采取行动,而不是等待6秒钟。我基本上设置了具有一个空数组的状态属性的用户对象。当执行急速按钮时,我将单词"急速"急速"仓促"到阵列中。然后我发表声明说,如果我具有"仓促状态",那么我将在3秒钟以6秒钟的时间行动。,这种效果破裂。例如,如果我按3次按下急速按钮,则将"急速"单词推入数组3次,这不是一个问题,因为稍后可以将其删除。我遇到的问题是,如果除了单个"仓促"之外,其他任何东西都在数组中,这种效果不起作用,这不是我想要的,因为将来我将使用它来推动其他状态效应。我该如何告诉我的代码,即使其他数组项目在我的数组中,仍会执行效果?
function hasteButton() {
atbReset()
user.status.push("haste");
console.log(user.status);
};
var user = {
status: []
};
function timeBar(el, color) {
var elem = document.getElementById(el);
if (user.status == "haste") {
elem.style.transition = "width 3.0s, linear 0s";
window.setTimeout(function () {
boxLight()
}, 2800);
} else {
elem.style.transition = "width 6.0s, linear 0s";
window.setTimeout(function () {
boxLight()
}, 5800);
}
}
您的代码中存在错误:您使用数组,但您将其检查为字符串;更改
if (user.status == "haste") {
if (user.status.indexOf("haste") != -1) {
听起来您只是想设置急速属性,而不是在数组中推出项目。这样,无论阵列中的其他内容,您都可以直接检查属性,并且急速设置将独立于数组中的其他事物。数组是用于有序集合的数组,但是haste
状态似乎只是布尔的状态,无论数组中有什么,它似乎都不属于数组中。
您只需将急速setting
作为状态数组的属性做出:
function hasteButton() {
atbReset()
user.status.haste = true;
console.log(user.status);
};
var user = {
status: []
};
function timeBar(el, color) {
var elem = document.getElementById(el);
if (user.status.haste) {
elem.style.transition = "width 3.0s, linear 0s";
window.setTimeout(function () {
boxLight()
}, 2800);
} else {
elem.style.transition = "width 6.0s, linear 0s";
window.setTimeout(function () {
boxLight()
}, 5800);
}
}
在您的代码中,您有: user.status
。此调用将返回一个数组,您需要以一种或另一种方式访问其元素。
我建议这样做:
if (user.status.indexOf('haste') >= 0) {
// do action
}
如果您要求它找到不在数组中的索引的元素,则数组上的indexOf
方法返回-1。