一旦达到每个值就执行 C++
Execute once every value is reached C++
标题并没有完全解释我想做的事情。
基本上我正在用 SFML 制作游戏,我希望玩家达到一定分数后出现老板,比方说 1000。但是我希望循环只让老板出现一次(目前它正在产卵一旦达到 1000 点标准,boss 就会发疯)我怎么才能让 boss 出现一次?目前这是我的代码。
//Spawns Boss
if (Player1.score >= 1000)
{
boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
enemyArray.push_back(boss1);
}
另外我希望boss每1000分只出现一次。例如,一旦玩家得分达到 1000,就会出现一个 Boss,然后在 2000 时出现另一个 Boss,反之亦然。
我还没有想出一个代码来做到这一点。我认为不需要额外的代码,但如果您确实需要它,请告诉我
*编辑
我使用了@RedFur 建议的一些实现,但是它只有在达到 1000 时才有效,一旦达到 2000,代码就不会再次执行。我假设它在 3000 时也不起作用,但我从未真正尝试过,有什么建议吗?
*编辑2
除了标志之外还使用了 RedFur 的解决方案来查看是否已生成 Boss。工作得天衣无缝。固定代码如下:
boss_appearances = 0;
bool flag = false;
if (flag == false){
if (Player1.score/1000 > boss_appearances) {
boss_appearances++;
do stuff;
flag = true
}
}
跟踪 boss 出现的次数是一种方法:
每当玩家达到 1000 时,boss 就会出现一次。然后每隔 1000 的倍数再做一次。
boss_appearances = 0;
if (Player1.score/1000 > boss_appearances) {
boss_appearances++;
do stuff;
}
由于1000是一个整数,所以结果是一个截断小数点的整数(假设score也是一个int)。所以玩家第一次达到 1000 到 2000 之间 Player1.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 最初生成时设置为真,然后在他被杀死时重置为假。或者类似的东西...
// 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
}
您可能想要了解的是某种游戏状态管理器的使用,它专门用于跟踪当前状态、发生的情况和时间。
标题并没有完全解释我想做的事情。
基本上我正在用 SFML 制作游戏,我希望玩家达到一定分数后出现老板,比方说 1000。但是我希望循环只让老板出现一次(目前它正在产卵一旦达到 1000 点标准,boss 就会发疯)我怎么才能让 boss 出现一次?目前这是我的代码。
//Spawns Boss
if (Player1.score >= 1000)
{
boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
enemyArray.push_back(boss1);
}
另外我希望boss每1000分只出现一次。例如,一旦玩家得分达到 1000,就会出现一个 Boss,然后在 2000 时出现另一个 Boss,反之亦然。 我还没有想出一个代码来做到这一点。我认为不需要额外的代码,但如果您确实需要它,请告诉我
*编辑 我使用了@RedFur 建议的一些实现,但是它只有在达到 1000 时才有效,一旦达到 2000,代码就不会再次执行。我假设它在 3000 时也不起作用,但我从未真正尝试过,有什么建议吗?
*编辑2 除了标志之外还使用了 RedFur 的解决方案来查看是否已生成 Boss。工作得天衣无缝。固定代码如下:
boss_appearances = 0;
bool flag = false;
if (flag == false){
if (Player1.score/1000 > boss_appearances) {
boss_appearances++;
do stuff;
flag = true
}
}
跟踪 boss 出现的次数是一种方法: 每当玩家达到 1000 时,boss 就会出现一次。然后每隔 1000 的倍数再做一次。
boss_appearances = 0;
if (Player1.score/1000 > boss_appearances) {
boss_appearances++;
do stuff;
}
由于1000是一个整数,所以结果是一个截断小数点的整数(假设score也是一个int)。所以玩家第一次达到 1000 到 2000 之间 Player1.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 最初生成时设置为真,然后在他被杀死时重置为假。或者类似的东西...
// 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
}
您可能想要了解的是某种游戏状态管理器的使用,它专门用于跟踪当前状态、发生的情况和时间。