以下是我的工具:CocosBuilder-2.1/CCBReader-2.1/cocos2d-iphone-2.0
我创建了TestNode.ccb
(根对象是CCNode),在其中我创建了2个时间轴,@"t0name"
(2s长)和@"t1name"
(2s长),
根节点设置为自定义类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
)刚设置{ {1}}条件为YES,根据上面的代码,名为TestNode
的时间轴将被播放一次(@"t0name"
长度为2s),然后将播放名为t0'
的时间轴一旦,然后控制台将打印“t1played”,一切都停止,但发生的事情是:
@"t1name"
的时间轴播放了一次@"t0name"
的时间轴播放了一次@"t1name"
的时间轴再次播放为什么step4发生了?它导致@"t0name"
再次被调用,控制台再次打印“t1played”(步骤5)
我检查了completedAnimationSequenceNamed:(NSString *) name
,两个时间轴都没有链接时间轴,时间轴未选中自动播放,TestNode.ccb
有@"t0name"
,sequenceId 0
有@"t0name"
,是sequenceId 1
自动播放???为什么???
我做了另一个有趣的实验:我将时间轴timeline 0
序列ID更改为1,将时间轴@"t0name"
“序列ID更改为2(使用任何文本编辑器直接编辑ccb文件),发生以下事情:
我想在这种情况下@"t1name
尝试播放CCAnimationManager
,但timeline 0
不存在,因此无法看到动画,但调用“播放”操作然后{ {1}}被称为!