[英]How do I generate a random X value for each “projectile” in my falling objects game using Javascript?
我正在編寫一個游戲,該游戲目前正處於初期階段,供一個項目嘗試了解有關編碼的更多信息。 在我的游戲中,物體隨機產生(綠色方塊),而玩家(紅色方塊)避開它們。 我在嘗試使綠色方塊從x軸上的隨機位置生成時遇到麻煩。 我已經有了一個為X生成隨機數的公式,但是在它隨機選擇一個數字之后,所有的“彈丸”都在該位置生成,而不是全部從不同的區域生成。 我如何才能從x軸上的不同位置隨機生成所有“彈丸”?
var randomX = Math.floor(Math.random() * 480) + 15;
function updateGameArea() {
var x, y;
for (i = 0; i < projectiles.length; i += 1) {
if (player.crashWith(projectiles[i])) {
gameArea.stop();
return;
}
}
gameArea.clear();
gameArea.frameNo += 1;
if (gameArea.frameNo == 1 || everyinterval(150)) {
x = randomX;
y = gameArea.canvas.height;
projectiles.push(new component(40, 40, "green", x, y));
}
for (i = 0; i < projectiles.length; i += 1) {
projectiles[i].y += -1; // the shape is using its coordinates to build downward from its y position
projectiles[i].update();
}
player.newPos();
player.update();
}
function everyinterval(n) {
if ((gameArea.frameNo / n) % 1 == 0) {return true;}
return false;
預期 :每3秒就會在x軸上的隨機位置生成一個綠色方塊,並向上移動
實際 :綠色方塊均從X軸上的相同隨機位置生成。
每次添加新的射彈時,都應重置X:
if (gameArea.frameNo == 1 || everyinterval(150)) {
randomX = Math.floor(Math.random() * 480) + 15;
x = randomX;
y = gameArea.canvas.height;
projectiles.push(new component(40, 40, "green", x, y));
}
否則,randomX值將保持不變,即解釋器到達該值時最初在第1行計算的值。
這是您的問題:
var randomX = Math.floor(Math.random() * 480) + 15;
// Generates a random number and stores it to randomX
// Called using 'randomX'
如果您希望每次運行它,都需要將其轉換為一個函數:
var randomX = function() { Math.floor(Math.random() * 480) + 15 };
// Returns a new number each time
// Called using 'randomX()'
從本質上講,shivashriganesh mahato和natelouisdev都對如何解決此問題做出了響應,但是由於您正在學習編碼,因此這里是一個提示。 當您編碼時,代碼將以特定順序運行。 如果要重復分配某些東西(在這種情況下使用的是隨機數),並且希望僅在事件發生后才出現,則需要確保在每個事件中都觸發它。
natelouisdev有一個很好的方法,因為通過將其用作函數,您可以在代碼中更清晰地調用隨機化器,並使它每次都重新分配x的值。
由於您正在開發游戲,因此划分代碼也是一個好主意。 這樣可以更輕松地將您的想法保持在每次事件觸發時的狀態。
例:
函數gameActive(){}-定義什么是正常的游戲玩法。 正常游戲過程中發生的一切都應在此處進行管理。
function gameArea(){}-定義游戲畫布,該畫布對UI的作用大於對游戲性的作用(得分,壽命,屏幕尺寸等)
如果創建了單個函數,您會意識到在常規游戲中只需要一個隨機的'x'值,因此您可以在gameActive()函數中分配它,而不是將其作為全局變量。 然后,您將在一個時間間隔內根據需要多次調用gameActive()函數,以確保每次都創建一個唯一值。
旁注:不要亂扔不必要的全局變量。 調試時,這會使您的代碼變得一團糟。 -
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.