Ошибка в 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" и все остановится, но произошло следующее:
- временная шкала названа
@"t0name"
играли один раз - временная шкала названа
@"t1name"
играли один раз - консольная печать "t1played"
- временная шкала названа
@"t0name"
играл снова - консольная печать "t1played" снова
Почему step4 произошло? это вызывает completedAnimationSequenceNamed:(NSString *) name
вызывается снова и консольная печать снова "t1played" (шаг 5)
Я проверил TestNode.ccb
, обе временные шкалы не имеют связанной временной шкалы, обе временные шкалы отключены для автоматического воспроизведения, @"t0name"
имеет sequenceId 0
, @"t0name"
имеет sequenceId 1
, является timeline 0
автоигра??? Зачем???
Я сделал еще один интересный эксперимент: я меняю график @"t0name"
идентификатор последовательности до 1, изменить временную шкалу @"t1name
msgstr "идентификатор последовательности до 2 (редактируйте файл ccb напрямую, используя любой текстовый редактор), происходит следующее:
- временная шкала с именем @"t0name" воспроизводится один раз
- временная шкала с именем @"t1name" воспроизводится один раз
- консольная печать "t1played"
- консольная печать "t1played" снова и снова и снова... тупик
Я думаю, в этом случае CCAnimationManager
попробуй поиграть timeline 0
, но timeline 0
там нет, поэтому анимации не видно, но вызывается операция "play", а затем completedAnimationSequenceNamed:(NSString *) name
называется!