2014-09-18 58 views
1

我正在试图用jquery制作一个使用函数附加子弹的游戏。到目前为止,只要我按空格键就会生成子弹,但是我想生成3-5个子弹。将生成3-5个子弹,然后再短暂休息,然后再生成3-5个子弹,并继续进行。子弹被附加为div元素。下面是代码,在jQuery中一次生成多个div

function generateBullet() { 
var Player = $('#player'); 
var PlayerLeft = Player.offset().left; 
var PlayerTop = Player.offset().top - 50; 
var appendingValue = "<div class='bulletID' style=' position: absolute; left: 250px; top: 250px;'></div>"; 
var appendSize = $('.bulletID').size(); 
if (appendSize >= 3) { 
    $('#content').delay(5000).append(appendingValue); 
} else { 
    $('#content').append(appendingValue); 
} 
} 

function animateBullet() { 
var bulletID = $('.bulletID'); 
bulletID.each(function() { 
    var nowTop = $(this).offset().top; 
    $(this).css("top", nowTop - 25); 
}); 
} 

var keys = {} 
$(document).keydown(function (e) { 
keys[e.keyCode] = true; 
}); 

$(document).keyup(function (e) { 
delete keys[e.keyCode]; 
}); 

function shoot() { 
var Player = $('#player'); 
for (var direction in keys) { 
    if (!keys.hasOwnProperty(direction)) continue; 
    if (direction == 32) { 
     generateBullet(); 
    } 
} 
} 

的jsfiddle DEMOhttp://jsfiddle.net/ygz5wo7r/1/

我没有得到任何更多的想法如何做到这一点。您的帮助将非常感激。 TNQ。

+3

的ID应该是唯一的'$( '#bulletID')'只返回第一个1个 – andrew 2014-09-18 17:31:43

+0

@andrew,更新的jsfiddle 。再来一次! – 2014-09-18 17:38:51

+0

在空间按键上会产生3-5个子弹,或者在空间保持时产生3-5个子弹,然后短暂休息 – 2014-09-18 17:42:00

回答

3

尝试this

我加

return false; 

if (appendSize >= 3) { 
    ... 

parseInt($(this).css("top"))< 0 && $(this).remove(); 

animateBullet()

当他们离开屏幕

+0

是的,这就是我正在寻找的。 Tnx很多兄弟。我非常喜欢jQuery。 – 2014-09-18 17:53:34

+0

thats ok'var appendSize = $('。bulletID')。size();'会得到子弹的数量,但你需要删除元素 – andrew 2014-09-18 17:55:05

+2

我不认为这是一个好的解决方案。因为你无法控制无法射击的持续时间。你必须等到子弹到达屏幕末端并消失后才能再次开火。 – 2014-09-18 17:56:20

2

你可以指望有多少发射子弹每一个链取出子弹,如果链达到3-5发子弹挡住了枪。然后使用超时时间可以解除对枪的阻挡。这样,你有过子弹链之间的间隔控制:

Fixed Fiddle

var bullets_chain = 0; 
var block_gun = false; 

function generateBullet() { 

    if (block_gun == false) { 
     var Player = $('#player'); 
     var PlayerLeft = Player.offset().left; 
     var PlayerTop = Player.offset().top - 50; 
     var appendingValue = "<div class='bulletID' style=' position: absolute; left: 250px; top: 250px;'></div>"; 
     bullets_chain++; 
     if (bullets_chain >= 5) { 
      block_gun = true; 
      bullets_chain = 0; 
      setTimeout(function() { 
       block_gun = false; 
      }, 500); 
     } 
     $('#content').append(appendingValue); 
    } 
} 

function animateBullet() { 
    var bulletID = $('.bulletID'); 
    bulletID.each(function() { 
     var nowTop = $(this).offset().top; 
     if (nowTop < 0) { 
      $(this).remove(); 
     } else { 

      $(this).css("top", nowTop - 25); 
     } 
    }); 
} 

var keys = {} 
$(document).keydown(function (e) { 
    if (block_gun == false) { 
     keys[e.keyCode] = true; 
    } 
}); 

$(document).keyup(function (e) { 
    delete keys[e.keyCode]; 
}); 

function shoot() { 
    var Player = $('#player'); 
    for (var direction in keys) { 
     if (!keys.hasOwnProperty(direction)) continue; 
     if (direction == 32) { 
      generateBullet(); 
     } 
    } 
} 
$(document).ready(function() { 
    setInterval(shoot, 50); 
    setInterval(animateBullet, 100); 
}); 
+1

+1这不是一个好的做法现在这就是我想的,但你更快地实现它:D。只需要添加子弹删除。 – 2014-09-18 18:04:09

+0

用子弹删除更新:) – Banana 2014-09-18 18:11:01