多个对象干扰实例

时间:2015-03-04 21:44:04

标签: javascript jquery html

所以,我正在用HTML / JS创建一个游戏(主要是Jquery)。

我在游戏开始时初始化了一个对象数组(当用户按下P进行播放时)。每个对象都是一个下降的对象(我知道它的失败是一个名为“working”的布尔值),“move”方法设置一个从1到22的位置。每次移动时,它会显示当前div,其数字为ID(表示位置),并隐藏前一个div。

问题在于,游戏只与Object的一个实例完美配合(因此阵列中只有一个单元格),但是当我尝试放置其他几个对象时,它们不会移动。

这是对象构造函数:

function flyers(){
this.pos = 0;
this.working = false;
this.jump = 0;
this.interval;
this.move = function(){
        if (this.working == true){

                if (this.pos == 22)
            {
                $("#perso21").hide();
                this.pos = 0;
                this.startWork();
            }
            checkSave();
        if (this.jump == 0)
            {   if ((this.pos == 5 && playerPos != 1) || (this.pos == 13 && playerPos != 2) || (this.pos == 19 && playerPos != 3))
            {
                this.die();
            }
                if ((this.pos == 4 && playerPos == 1) || (this.pos == 12 && playerPos == 2) || (this.pos == 18 && playerPos == 3))
                    this.jump = 1;
        }
        else
        {
            if (this.pos == 5 || this.pos == 13 || this.pos == 19)
            {
            score++;
            this.jump = 0;
            }
            $(".score").html("" + score + "");
        }
            $("#perso" + (this.pos - 1) + "").hide();
            $("#perso" + this.pos + "").show(); this.pos++;
        }
        else
            clearInterval(this.interval);
    };
this.startWork = function()
{
    clearInterval(this.interval);
    this.working = true;
    this.interval = setInterval(this.move, 1000 - (score / 10 * 100));
}
this.die = function(){

    this.working = false;
    this.pos = 0;
    this.jump = 0;
    if (miss < 2)
        {
            miss++;
        }
    else
        {
            quitGame();
        }
        clearInterval(this.interval);
};
return this;}

阵列初始化:

flyerstab[0] = new flyers();
flyerstab[1] = new flyers();
flyerstab[2] = new flyers();
flyerstab[3] = new flyers();
flyerstab[0].startWork();

产卵者(只能同时有4个物体掉落)

spawn = setInterval(function()
{
    var i;

    for (var i = flyerstab.length - 1; i >= 0; i--) {
        if (flyerstab[i].working == false)
        {
            flyerstab[i].startWork();
            break;
        }
        else
            console.log(i + " is working");
    };
}, 5000 - (score / 10 * 100));

我试着一整天都找到了原因,但我没有设法......我构建它们是不是很糟糕?

1 个答案:

答案 0 :(得分:0)

this.interval = setInterval(this.move, 1000 - (score / 10 * 100));内部,this.move作为全局上下文调用this。相反,使用

this.interval = setInterval(this.move.bind(this), 1000 - (score / 10 * 100));