2014-09-18 123 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