0
switch (e.keyCode) {

    case 32: 
        $("#Main").prepend('<div class="Bomb" style="absolute; top:' + position.top + 'px; left: '+ position.left +'px;"></div>');

        setTimeout( function(){ 

            var BombPos = $('.Bomb').position();

            var BombPosTopb = BombPos.top;
            var BombPosLeftb = BombPos.left;
            var BombPosTopt = BombPos.top;
            var BombPosLeftt = BombPos.left;
            var BombPosTopl = BombPos.top;
            var BombPosLeftl = BombPos.left;
            var BombPosTopr = BombPos.top;
            var BombPosLeftr = BombPos.left;
            $(this).remove();

            .... More stuff

            if (CheckRight == false){
                $("#Main").prepend('<div class="Effect" style="absolute; top:' + BombPosTopr + 'px; left: '+ BombPosLeftr +'px;"></div>');
                BombPosLeftr += 30;
            }
        };

        setTimeout( function(){ 
            $('.Effect').remove();
        }
        , 1000 );
    }
    , 1500 );

我的项目被称为炸弹人,我正在尝试产生多个炸弹。这段代码的问题是:我生成了这个对象,它可以工作,而且没有任何问题。

但是当我多次单击空格键并放置超过 1 个炸弹时,它们都会同时消失。

我只是希望他们在我的每个小炸弹上都有一个“单独的计时器”,这样当我点击空格键而不是一次全部点击时,它们会在 1-2 秒后吓坏。

4

2 回答 2

0

将你的炸弹变成物体。

你需要一个 var 来记住你放置的所有炸弹:

var arrBombs = new Array();

然后keypress,添加一个新对象:

case 32:
    arrBombs.push(new objBomb());

然后为你的 objBomb 提供一个函数,其中包含你的代码:

function objBomb(){
    var self = this;
    self.el = $('<div/>');
    self.el.addClass('bomb')
    self.el.css({position : 'absolute', top : position.top + 'px', left : position.left+'px'})
    $("#Main").prepend(self.el);

    self.explosionTime = setTimeout( function(){ 

        self.BombPos = self.el.position();

        self.BombPosTopb = self.BombPos.top;
        self.BombPosLeftb = self.BombPos.left;
        self.BombPosTopt = self.BombPos.top;
        self.BombPosLeftt = self.BombPos.left;
        self.BombPosTopl = self.BombPos.top;
        self.BombPosLeftl = self.BombPos.left;
        self.BombPosTopr = self.BombPos.top;
        self.BombPosLeftr = self.BombPos.left;
        $(self).remove();

        .... More stuff

        if (CheckRight == false){
            $("#Main").prepend('<div class="Effect" style="absolute; top:' + BombPosTopr + 'px; left: '+ BombPosLeftr +'px;"></div>');
            BombPosLeftr += 30;
        }
    };
}

代码可能不准确,你肯定会出错。但是对于您的项目,创建 obj 是最好的解决方案。

如果您不知道对象是什么,请查看MDN 使用对象

于 2013-05-01T15:16:11.970 回答
0

我认为正确的方法是创建一个超时方法,该方法将仅移除时间已到的炸弹。Fe 通过记住您为每个炸弹启动计时器的时间。

于 2013-05-01T14:57:26.830 回答