ここに私のツールがあります:CocosBuilder-2.1/CCBReader-2.1/cocos2d-iphone-2.0
私が作成したTestNode.ccb(ルートオブジェクトはCCNodeです)、その中に2つのタイムライン@"t0name"(長さ2秒)と(長さ2秒)を作成し@"t1name"、ルートノードはカスタムクラスに設定されています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() に、playAnimation のインスタンスを追加しTestNodeて呼び出します。上記のコードに従って、指定されたタイムライン@"t0name"が永久に再生され、実際に起こったことは私の仮定と同じです。
奇妙なケース: メイン レイヤーのonEnter()に のインスタンスを追加してTestNodeを呼び出しplayAnimation、関数をスケジュールします[self schedule:@selector(changeTestNodeCondition) interval:1.0];this function( changeTestNodeCondition)TestNodeの条件を YES に設定しただけです。上記のコードによれば、@"t0name"wil という名前のタイムラインが 1 回再生されます (t0'長さは 2 秒です) 。 )、その後、指定されたタイムライン@"t1name"が 1 回再生され、コンソールに「t1played」と出力され、すべてが停止しますが、何が起こったかは次のとおりです。
@"t0name"一度だけ再生されたという名前のタイムライン@"t1name"一度だけ再生されたという名前のタイムライン- コンソール出力「t1played」
@"t0name"再び再生されたという名前のタイムライン- コンソール印刷 "t1played" 再び
なぜstep4が起こったのですか?原因completedAnimationSequenceNamed:(NSString *) nameが再度呼び出され、コンソールに "t1played" が再度表示されます (手順 5)
、両方TestNode.ccbのタイムラインにチェーンされたタイムラインがなく、両方のタイムラインにチェックが入っていない自動再生、@"t0name"ありsequenceId 0、@"t0name"ありsequenceId 1、自動再生ありtimeline 0??? どうして???
別の興味深い実験を行いました: タイムライン@"t0name"シーケンス ID を 1 に変更し、タイムライン@"t1name" シーケンス ID を 2 に変更 (任意のテキスト エディターを使用して ccb ファイルを直接編集) すると、次のことが起こります。
- @"t0name" という名前のタイムラインが 1 回再生されました
- @"t1name" という名前のタイムラインが 1 回再生されました
- コンソール出力「t1played」
- console print "t1played" 何度も何度も...デッドループ
CCAnimationManagerこの場合は再生しようと思いますtimeline 0がtimeline 0、そこにないのでアニメーションは見られませんが、「再生」操作が呼び出されてからcompletedAnimationSequenceNamed:(NSString *) name呼び出されます!