视觉 C++达到每个值后执行

visual Execute once every value is reached C++

本文关键字:执行 C++ 视觉      更新时间:2023-10-16

标题并没有完全解释我想做什么。

基本上,我正在用SFML制作一个游戏,我希望一旦玩家达到一定的分数,比如说1000分,就会出现一个老板。但是我希望循环只让老板出现一次(目前一旦满足 1000 分标准,它就会疯狂地生成老板)我如何让老板出现一次?目前这是我的代码。

//Spawns Boss
if (Player1.score >= 1000)
{
boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
enemyArray.push_back(boss1);
}

另外,我希望老板每1000分只出现一次。例如,一旦玩家达到 1000 分,就会出现一个 Boss,然后在 2000 分出现另一个老板,反之亦然。 我还没有想到执行此操作的代码。我认为不需要额外的代码,但如果您需要它,请告诉我

*编辑我使用了@RedFur建议的一些实现,但是它仅在达到 1000 时才有效,一旦达到 2000,代码就不会再次执行。我假设它在 3000 下也不起作用,但我从未真正尝试过,有什么建议吗?

*Edit2除了使用标志外,还使用了RedFur的解决方案来查看是否生成了boss。工作完美无瑕。修复了下面的代码:

boss_appearances = 0;
bool flag = false;
if (flag == false){
if (Player1.score/1000 > boss_appearances) {
boss_appearances++;
do stuff;
flag = true
}
}

跟踪老板出现的次数是一种方法: 每次玩家达到1000时,boss就会出现一次。然后对 1000 的每倍数再做一次。

boss_appearances = 0;
if (Player1.score/1000 > boss_appearances) {
boss_appearances++;
do stuff;
}

由于整数中的 1000,结果是一个带有截断小数的整数(假设分数也是整数)。因此,玩家第一次达到 1000 到 2000Player1.score/1000等于 1,依此类推。

int numBossSpawns = 1;
if (Player1.score >= numBossSpawns * 1000)
{
boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
enemyArray.push_back(boss1);
numBossSpawns++;
}

这样的东西可能会起作用,我认为类似的解决方案已经发布

在查看了其他解决方案的一些注释后,对每秒每帧生成的 boss 怪物的简单快速修复是添加一个标志,以防止 boss 怪物在第一次后再次生成。

当 Boss 最初生成时,此标志可以设置为 true,然后在他被杀死时重置为 false。或者类似的东西...

// flag initialised to true. The boss isn't alive yet.
bool bossNotAlive = true;
/* check if score is a multiple of 1000, not the most effective method    */
/* if the players score goes from 990 to 1090 without ever hitting 1000,  */
/* it wouldn't trigger a boss spawn.                                      */
if (bossNotAlive && Player1.score % 1000 == 0) 
{
// since the boss is about to be spawned, 
bossNotAlive = false;
boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
enemyArray.push_back(boss1);
}
// Something in the boss to check death.
if (Boss.health < 0)
{
bossNotAlive = false;
// Call Destructor or something
}

您可能想要查看的是使用某种游戏状态管理器,专门用于跟踪当前状态,发生的情况和时间。