我正在制作一款游戏:http://www.taffatech.com/DarkOrbit.html
我想要做的是当我杀死一定数量的敌人时它会升级。这部分是有效的,但是当你升级时我也希望生成量增加。
在我的循环函数中:
function Loop()
{
if (isPlaying == true)
{
updateLevel(); //this updates the level but it calls it every frame which might be bad.
Player1.draw();
drawAllEnemies();
updateStats();
requestAnimFrame(Loop);
}
更新级别功能:
function updateLevel()
{
if(Player1.enemiesKilled <3)
{
level = 1;
}
else if(Player1.enemiesKilled > 3 && Player1.enemiesKilled <= 9)
{
level = 2;
}
else if(Player1.enemiesKilled > 9 && Player1.enemiesKilled <=18)
{
level = 3;
}
else if(Player1.enemiesKilled > 18 && Player1.enemiesKilled <= 38)
{
level = 4;
}
else if(Player1.enemiesKilled > 38 && Player1.enemiesKilled <= 70)
{
level = 5;
s
}
else if (Player1.enemiesKilled > 120)
{
level = 6;
}
if(level == 1)
{
spawnAmount = 1;
}
else if(level == 2)
{
spawnAmount = 2;
}
else if(level == 3)
{
spawnAmount = 3;
}
else if(level == 4)
{
spawnAmount = 4;
}
else if(level == 5)
{
spawnAmount = 5;
}
else if(level == 6)
{
spawnAmount = 6;
}
}
产生敌人的功能:
function spawnEnemy(number) //total enemies starts at 0 and every-time you add to array
{
for (var x = 0; x < number; x++)
{
enemies[enemies.length] = new Enemy();
}
}
我的初学者:
function init()
{
spawnEnemy(spawnAmount);
drawMenu();
sndIntro.play();
document.addEventListener('click', mouseClicked ,false);
}
我尝试添加:spawnEnemy(spawnAmount);在更改updateLevel函数中的spawn amount global var之后,但是每次调用它都会让数百个敌人飞向我。我该如何解决这个问题?
如果我尝试这样的事情就会产生数百个敌人,我会假设因为每个帧都会被调用:
if(level == 1)
{
spawnAmount = 1;
spawnEnemy(spawnAmount);
}
答案 0 :(得分:1)
如果您的目的是提高每个级别的生成率,我建议您先从spawnRate
开始。让spawnRate
代表敌人产卵之间的游戏更新次数。每当敌人产生时,减少另一个变量(比如spawnRateCountdown
),直到该变量达到0,然后产生一个敌人。将变量重置为spawnRate
。冲洗并重复。
spawnRate = 60; /* one enemy every 60 updates. */
spawnRateCountdown = spawnRate;
function updateLoop() {
spawnRateCountdown--;
if (spawnRateCountdown == 0) {
spawnRateCountdown = spawnRate;
spawnEnemy();
}
}
之后,您可以根据需要更新spawnRate
变量。
答案 1 :(得分:0)
问题在于你不时不会创造新的敌人,而只是在爆炸时将同一个敌人转移得更远(即调用recycleEnemy
方法)。这个单个敌人只产生一次:spawnEnemy
函数仅在init
方法中使用参数1
调用。
你应该重做敌人的产卵算法。下面是一个非常好的样本,它会增加敌人的产卵率:
从number
函数中删除spawnEnemy
参数:只生成一个敌人
更改Enemy.prototype.recycleEnemy
功能,从this
删除enemies
。要小心:如果你在enemies
的循环中调用此函数,你需要减少计数器,以确保你不会跳过下一个敌人:--i
添加function getSpawnCooldown() { return 100 / spawnAmount; }
(100是近似常数,您可以对其进行变量以更改初始产卵率)
添加变量time
,表示从头开始有效Loop
次调用的次数,默认为0
添加变量lastSpawnTime
,将其设置为0
在if
函数的Loop
块内,添加行:
++time
if (time >= lastSpawnTime + getSpawnCooldown()) spawnEnemy();
在spawnEnemy
函数中添加一行:lastSpawnTime += getSpawnCooldown()
通常,您应该更好地构建代码。至少,将它拆分为几个js文件,这些文件负责应用程序的不同部分。