标题并没有完全解释我正在尝试做什么。
基本上我正在使用SFML进行游戏,一旦玩家达到一定的分数,我想要一个老板出现,让我们说1000.但是我希望循环只让老板出现一次(目前它产生了老板)一旦满足1000点标准就像疯了一样)我怎么能让老板出现一次呢?目前这是我的代码。
//Spawns Boss
if (Player1.score >= 1000)
{
boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
enemyArray.push_back(boss1);
}
此外,我希望老板每1000分只出现一次。例如,一旦玩家达到1000分,则在2000年出现另一个老板,反之亦然。 我还没有想过要执行此操作的代码。我不认为需要额外的代码,但如果你确实需要,请告诉我
*修改 我使用了@RedFur建议的一些实现,但是只有达到1000才能工作,一旦达到2000,代码就不再执行了。我假设它也不会在3000工作,但我从来没有尝试,任何建议?
* EDIT2 除了标志之外还利用RedFur的解决方案来查看老板是否已经产生。工作完美无瑕。固定代码如下:
boss_appearances = 0;
bool flag = false;
if (flag == false){
if (Player1.score/1000 > boss_appearances) {
boss_appearances++;
do stuff;
flag = true
}
}
答案 0 :(得分:4)
跟踪老板出现的次数是一种方法: 每次玩家达到1000,老板出现一次。然后再为1000的每个倍数再做一次。
boss_appearances = 0;
if (Player1.score/1000 > boss_appearances) {
boss_appearances++;
do stuff;
}
由于整数为1000,因此结果是带有截断小数的整数(假设得分也是int)。所以玩家第一次达到1000到2000之间Player1.score/1000
等于1等等。
答案 1 :(得分:1)
int numBossSpawns = 1;
if (Player1.score >= numBossSpawns * 1000)
{
boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
enemyArray.push_back(boss1);
numBossSpawns++;
}
类似的东西可能有用,我认为类似的解决方案已经发布了。
答案 2 :(得分:0)
在查看其他解决方案的一些评论之后,对每秒每帧生成的boss怪物的简单快速修复就是添加一个标志,以防止老板怪物在第一次生成后再次生成。 / p>
当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
}
你可能想要看的是使用某种游戏状态管理器,专门用于跟踪当前状态,发生的事情以及何时发生。