Ошибка в cocos2d/cocosbuilder или нет: почему таймлайн 0(sequenceId) запускается автоматически?

Вот мои инструменты: CocosBuilder-2.1/CCBReader-2.1/cocos2d-iphone-2.0

я создал TestNode.ccb(корневым объектом является CCNode), в нем я создаю 2 временные шкалы,@"t0name"(Длиной 2 с) и @"t1name"(Длиной 2 с), корневой узел установлен на пользовательский класс TestNode

я создал TestNode.h:

#import "CCBAnimationManager.h"

@interface TestNode : CCNode <CCBAnimationManagerDelegate>{

}
@property (nonatomic, assign) BOOL condition;
@property (nonatomic, assign) BOOL t1Played;

-(void)playAnimation:(NSString *)name;
-(void)playAnimation;

@end

и вот TestNode.m:

#import "TestNode.h"
#import "CCBReader.h"

@implementation TestNode

@synthesize condition;
@synthesize t1Played;

-(void)playAnimation:(NSString *)name{
    CCBAnimationManager* animationManager = self.userObject;
    [animationManager runAnimationsForSequenceNamed:name];
}

-(void)playAnimation{
    if(self.condition==YES) {
        [self playAnimation:@"t1name"];
        self.t1played=YES;
    }else{
        [self playAnimation:@"t0name"];
    }
}

-(void)didLoadFromCCB{
    CCBAnimationManager* animationManager = self.userObject;
    animationManager.delegate = self;
}

-(void)completedAnimationSequenceNamed:(NSString *)pName{
    if (self.t1played==YES) {
        NSLog(@"t1played");
    }else{
        [self playAnimation];
    }
}

@end

Также есть основной слой (TestScene.h/.m), в этой сцене я добавлю CCNode и что-нибудь еще...

Нормальный случай:

В основном слое onEnter(), Я добавляю экземпляр TestNode и назовите это playAnimation, в соответствии с кодом выше, временной шкалой с именем @"t0name" будет сыграно навсегда, и то, что произошло на самом деле, совпадает с моим предположением.

Странный случай: в основном слое onEnter()Я добавляю экземпляр TestNode и назовите это playAnimationИ запланировать функцию [self schedule:@selector(changeTestNodeCondition) interval:1.0]; эта функция (changeTestNodeCondition) просто установить TestNodeв соответствии с приведенным выше кодом @"t0name" будет сыграно один раз (t0' длина составляет 2 с), то временная шкала с именем @"t1name" будет воспроизведен один раз, затем консоль выведет "t1played" и все остановится, но произошло следующее:

  1. временная шкала названа @"t0name" играли один раз
  2. временная шкала названа @"t1name" играли один раз
  3. консольная печать "t1played"
  4. временная шкала названа @"t0name" играл снова
  5. консольная печать "t1played" снова

Почему step4 произошло? это вызывает completedAnimationSequenceNamed:(NSString *) name вызывается снова и консольная печать снова "t1played" (шаг 5)

Я проверил TestNode.ccb, обе временные шкалы не имеют связанной временной шкалы, обе временные шкалы отключены для автоматического воспроизведения, @"t0name" имеет sequenceId 0, @"t0name" имеет sequenceId 1, является timeline 0 автоигра??? Зачем???

Я сделал еще один интересный эксперимент: я меняю график @"t0name" идентификатор последовательности до 1, изменить временную шкалу @"t1namemsgstr "идентификатор последовательности до 2 (редактируйте файл ccb напрямую, используя любой текстовый редактор), происходит следующее:

  1. временная шкала с именем @"t0name" воспроизводится один раз
  2. временная шкала с именем @"t1name" воспроизводится один раз
  3. консольная печать "t1played"
  4. консольная печать "t1played" снова и снова и снова... тупик

Я думаю, в этом случае CCAnimationManager попробуй поиграть timeline 0, но timeline 0 там нет, поэтому анимации не видно, но вызывается операция "play", а затем completedAnimationSequenceNamed:(NSString *) name называется!

0 ответов

Другие вопросы по тегам