我的"push array"功能不起作用



我正在研究最终幻想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。

相关内容

最新更新