Sprite Kit: ожидание вызова функции, пока не будет выполнено условие X - PullRequest
0 голосов
/ 12 января 2020

Я работаю над игрой (шутер сверху вниз) и наткнулся на небольшую загадку. До этого момента я порождал врагов с функциями, которые работают только с задержками:

Функция Wave One - Задержка 3, порождает врагов // Функция Wave Two - Задержка 6, порождает врагов

Я делаю это, потому что я не нашел способа дождаться завершения всех действий в данной функции, прежде чем вызывать следующую - при существующем положении функция functionWaveOne вызывает functionWaveTwo, которая вызывает functionWaveThree (et c).

Это работало до сих пор. Что изменилось, так это то, что я хочу, чтобы два врага остались на экране, и пока они не умрут, я не хочу, чтобы пришла следующая волна. Моим первоначальным решением этого было подсчитать, сколько врагов погибло в четвертой волне:

Обнаружить столкновение -> Применить урон -> Проверить, если мертв -> Если да, deadWaveFourEnemies ++

Вот Моя проблема: у меня есть основное оружие - два параллельных лазера, поэтому они могут столкнуться с врагом в одно и то же время. Это приводит к ложным срабатываниям, что делает счет мертвого врага на go выше, чем следовало бы. Я даже пытался добавить функцию «Я жив» к классу противника, но безрезультатно.

Кто-нибудь из вас получил рекомендацию о том, как лучше вызывать функции или обойти эти ложные позитивы? Спасибо!

Если это поможет:

if([enemySprite.name isEqual: @"shooter"]){
    enemyShooter *enemyClass = (enemyShooter *)enemySprite;
    itDied = [enemyClass doDamageWithAmount:secondaryWeaponDamage];
    scoreIncrease = [enemyClass getScoreIncrease];
    stillAlive = [enemyClass amIAlive];

}

[weaponSprite removeFromParent];

if(itDied){
    [self increasePlayerScoreBy:scoreIncrease];

    if(inWaveFour == 1 && stillAlive == 1){
        waveFourKilled++;
        NSLog(@"Seconday / Number killed: %i", waveFourKilled);
    }
}
...