如何使if语句只运行一次。我正在用javascript制作一个游戏,一旦用户得分为5,我想在阵列中添加一个新的敌人。我遇到的问题是,如果if语句为真,它会不断添加新的敌人,直到整个屏幕被敌人覆盖。我希望它在得分为5时只添加1个新敌人,然后在得分为10时添加另一个敌人等等。我无法想到实现这一目标的方法。谢谢。
Sketch.js
var score = 0;
//3 three enemies once game starts
function StartingEnemies() {
for (var i = 0; i < 2; i++) {
enemies[i] = new BasicEnemy();
}
}
//add new enemies into the array
function spawnNewEnemies() {
enemies.push(new BasicEnemy());
}
if (score == 5) {
spawnNewEnemies();
}
答案 0 :(得分:4)
你需要一个简单的闩锁。尝试添加一个名为isEnemyAddedAtFive的布尔变量,并将其设置为false,因为它是默认值。
var isEnemyAddedAtFive = false;
然后在你的检查点测试这个值,如果没有锁定,则执行并锁定:
if( score == 5 && !isEnemyAddedAtFive ) {
addEnemy();
isEnemyAddedAtFive = true;
}
祝你好运!
答案 1 :(得分:3)
if ( score != 0 && score % 5 == 0) {
spawnNewEnemies();
}
试试这个。
答案 2 :(得分:2)
TimePref p = (TimePref) findPreference(prefKey);
p.setValue(value);
如果您正在运行函数内部的代码,请确保在某个地方声明addNew,它将在调用之间保持不变。
答案 3 :(得分:2)
这比你目前的编码要复杂一些。有几种方法可以解释这一点。坚定您的要求。
如果分数可以被5整除,你是否只想添加一个敌人......只有当分数以0或5(5,10,15,20等)结束时才有意义:
If (score % 5 == 0) {
enemies.push(new BasicEnemy());
}
否则,您可能需要跟踪总分和一个级别/分段分数,代表自该计划上次对游戏采取行动以来的分数。
// Initialization
var totalScore = 0;
Var currents core = 0;
// Game event loop
while (player.lifeState > 0) {
// Check current score is 5 or more on every iteration of the game event loop
if (currentScore >= 5) {
// Handle score
spawnNewEnemies();
// Update scoring
totalScore += currentScore;
// Reset currentScore (or not if you want to do more stuff in the level before resetting but this may change the above logic)
currentScore = 0;
}
随着您的更多功能,您的逻辑将变得更加复杂。最好的第一步是在编码之前定义明确的要求,因为退休可能会影响您实施另一个
的方式答案 4 :(得分:1)
//post this snippet at some top level of your code.
var onceMap = {};
function once(key) {
if (onceMap[key]) {
return false;
} else {
onceMap[key] = true;
return true;
}
}
var score = 10;
//do this in your task function
function task() {
if (score >= 5 && once("score5")) {
console.log("score 5 action");
}
if (score >= 10 && once("score10")) {
console.log("score 10 action");
}
}
task();
task();
task();
答案 5 :(得分:1)
看到您的代码后首先想到的是:
应该是
for (var i = 0; i < 3; i++)
3个敌人
您正在多次调用您的代码(即.js文件)。这意味着每次调用时分数重置为0,并且分数== 5条件多次出现。
<强>解决方案:强>
更改你的逻辑,使得.js文件只被调用一次,并在整个游戏期间存储得分。
希望这有帮助
答案 6 :(得分:0)
!( score != 0 && score % 5 == 0) || spawnNewEnemies()
//how it functions
!true || run()
我不得不承认这有点抽象。但是,这样做的是,如果分数为true,则将其逼为false并运行spawnNewEnemies。如果分数不正确。它会强制为真,而不会运行错误条件。
但是id建议对函数进行编辑:
var spawnNewEnemies =scored=> !(scored !=0 && scored%5===0) || enemies.push(new BasicEnemy());
spawnNewEnemies(score);
SpawnNewEnemies现在带有一个得分参数。而且还有一个箭头功能,可用于快速单线。由于得分是依赖项,因此它将在该条件下运行。如果基本得分是0,并且也可以被5整除,则条件返回true,但是“ bang”(!)运算符将其强制为false,并执行新的敌人。如果分数不能被五整除,它将返回false,但爆炸声将其翻转,并且不会返回OR的错误论证。