Динамически выделять параметр для действия при запуске последовательности

Столкнулся с проблемой и не могу найти на нее ответ. Я работаю с шаблоном SK из Xcode для создания игры для iOS. Я новичок, так что терпите меня.

В основном у меня есть этот код:

SKAction *releaseBubbles = [SKAction sequence:@[
                                                    [SKAction performSelector:@selector(createBubbleNode)onTarget:self],
                                                    [SKAction waitForDuration:speed]]];
[self runAction: [SKAction repeatAction:releaseBubbles
                                      count:300]];

который выполняется в

-(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {

Я меняю уровень на свою игру в -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {, и когда я меняю уровень, он также должен изменить этот параметр скорости. Конечно, это не работает, потому что я считаю, что мое действие начинается, когда сцена инициализируется, и я никогда не переключаю параметр.

Что мне нужно сделать, так это постоянно заполнять экран пузырьками, появляющимися в определенном темпе (относительно уровня).

Я действительно понятия не имею, как это исправить, потому что мне кажется, что мне нужно как-то остановить и перезапустить последовательность действий...

С нетерпением ждем вашего ценного вклада.


person Deea B    schedule 22.02.2014    source источник


Ответы (1)


Чтобы постоянно заполнять экран пузырьками, вы можете использовать метод update: вашего SKScene. Вот как это сделать.

Во-первых, добавьте свойство, в котором будет храниться дата последнего добавления пузырька.

@property(nonatomic, strong) NSDate *lastBubbleCreationDate;

Затем измените метод update: на:

-(void)update:(CFTimeInterval)currentTime
{
    // Create new bubble every 5s.
    if (ABS([_lastBubbleCreationDate timeIntervalSinceNow]) > 5)
    {
        [self createBubbleNode];
    }
}

Наконец, в вашем методе createBubbleNode вы должны сохранить время, когда вы создали последний пузырь:

-(void)createBubbleNode
{
    // Your code here

    // Set the date to now.
    _lastBubbleCreationDate = [NSDate date];
}

Вам также необходимо вызвать createBubbleNode, чтобы установить начальное значение _lastBubbleCreationDate. Вы можете сделать это в методе didMoveToView:. Просто добавьте этот метод в свою реализацию сцены:

- (void)didMoveToView:(SKView *)view
{    
    // Creates first bubble and sets the initial value of the _lastBubbleCreationDate
    [self createBubbleNode];
}

На следующих уровнях вы можете просто изменить значение 5s, чтобы чаще создавать пузыри, что усложнит игру.

person Rafa de King    schedule 22.02.2014