cocos2d / cocosbuilder的错误:为什么时间轴0(sequenceId)会自动运行?

时间:2013-04-14 01:45:39

标签: iphone ios cocos2d-iphone cocosbuilder

以下是我的工具: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”,一切都停止,但发生的事情是:

  1. 名为@"t1name"的时间轴播放了一次
  2. 名为@"t0name"的时间轴播放了一次
  3. console print“t1played”
  4. 名为@"t1name"的时间轴再次播放
  5. 控制台再次打印“t1played”
  6. 为什么step4发生了?它导致@"t0name"再次被调用,控制台再次打印“t1played”(步骤5)

    我检查了completedAnimationSequenceNamed:(NSString *) name,两个时间轴都没有链接时间轴,时间轴未选中自动播放,TestNode.ccb@"t0name"sequenceId 0@"t0name",是sequenceId 1自动播放???为什么???

    我做了另一个有趣的实验:我将时间轴timeline 0序列ID更改为1,将时间轴@"t0name"“序列ID更改为2(使用任何文本编辑器直接编辑ccb文件),发生以下事情:

      名为@“t0name”的
    1. 时间轴播放了一次
    2. 名为@“t1name”的
    3. 时间轴播放了一次
    4. console print“t1played”
    5. 控制台打印“t1played”一次又一次......死循环
    6. 我想在这种情况下@"t1name尝试播放CCAnimationManager,但timeline 0不存在,因此无法看到动画,但调用“播放”操作然后{ {1}}被称为!

0 个答案:

没有答案