每个值达到C ++后执行一次

时间:2017-04-13 19:50:01

标签: c++ visual-c++ sfml

标题并没有完全解释我正在尝试做什么。

基本上我正在使用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
    }
}

3 个答案:

答案 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
}

你可能想要看的是使用某种游戏状态管理器,专门用于跟踪当前状态,发生的事情以及何时发生。