Nano Hash - криптовалюты, майнинг, программирование

Как запустить два метода последовательно с задержкой по времени?

[self goToStage:currentStage];
[actor deathAnimation];

У меня есть эти два метода. Я хочу вызвать его один за другим в последовательности. Когда один завершен после начала второго.

//this method used in nsobject subclass
-(void)deathAnimation {

    //Play death animation

}

//this method in cclayer subclass
-(void)goToStage:(int)stage {

   //changing scene
}

В моей функции тика в определенном событии я хочу вызвать последовательно

Я использую следующий код, но он не работает

[CCSequence actions:[CCCallFunc actionWithTarget:actor selector:@selector(deathAnimation)], [CCDelayTime actionWithDuration:4.0], [CCCallFuncN actionWithTarget:self selector:@selector(goToStage:)], nil];

Now what i do? Please tell me.. Is there something wrong?


Ответы:


1

Вы можете использовать CCDelayTime, который используется для задержки, и CCCallBlock, чтобы передать вызываемый метод, например:

[self runAction:[CCSequence actions:[CCDelayTime actionWithDuration:1],
                                    [CCCallBlock actionWithBlock:^{[self goToStage:currentStage];}],
                                    [CCDelayTime actionWithDuration:1],
                                    [CCCallBlock actionWithBlock:^{[actor deathAnimation}], nil]];
31.05.2013

2

Определите блок в вашем интерфейсе, например.

typedef void(^MyCompletion)(void);

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

- (void)deathAnimationWithCompletion:(MyCompletion)finish {
    //..death animation
    //...

    //when animation finishes
    finish(); // This will call your completion block
}

Вызовите этот метод как

[self deathAnimationWithCompletion:^{
    [self goToStage:2];
}];

Вы можете прочитать о блоках в фантастическом блоге Рэя Вендерлиха. .

Надеюсь, поможет!

РЕДАКТИРОВАТЬ ИЗ-ЗА КОММЕНТАРИЙ
В cocos2d я думаю, вы также можете сделать последовательность, подобную этой

id aFuncCall = [CCCallFunc actionWithTarget:self selector:@selector(deathAnimation)];
id antoherFuncCall = [CCCallFunc actionWithTarget:self selector:@selector(goToSecondStange:)];
CCSequence *sequence = [CCSequence actions:aFuncCall,anotherFuncCall, nil];
[self runAction:sequence];

Но мои навыки программирования cocos2d немного устарели, поэтому не уверен, что это работает...

29.05.2013
  • deathAnimation и goToSecondStange имеют тип void. поэтому в ccsequence вы не используете метод напрямую. 29.05.2013

  • 3

    Вы можете позвонить

    [Анимация смерти актера];

    в конце функции goToStage, таким образом она выполнит все в goToStage перед вызовом deathAnimation.

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

    29.05.2013
  • нет нет... я хочу вызвать deathAnimation перед вызовом goToStage 29.05.2013
  • ок, извините, я неправильно понял, что вы хотели. Затем вы можете вызвать [self goToStage:] в конце функции [actor deathAnimation], как предложил Филип. 29.05.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..