是否可以在CCNode上使用cocos2d转换?

时间:2013-05-24 14:44:46

标签: objective-c cocos2d-iphone

我看到的关于如何使用过渡的每个例子都是这样的CCScene:

[[CCDirector sharedDirector] replaceScene:[CCTransitionCrossFade transitionWithDuration:0.5f scene:[NewScene scene]]];

我的应用程序设置了GameScene,MenuScene ..等。在GameScene中,我设置了DPad和HUD,然后我将英雄移动到CCNode类型的不同级别。我想使用原生过渡从一个级别移动到下一个级别。

我发现了类似to what I need here的问题,但该用户基本上被告知要自己构建转换。

令我感到困惑的部分是CCNode包含一个名为:

的方法
- (void) onEnterTransitionDidFinish

那么,有没有办法使用我缺少的CCNode转换?我的应用设置是否设置错误,级别应该是CCScene?如果是这样,如何让HUD和Dpad保持过渡?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

CCTransitions专门用于场景。 CCNodes包含onEnterTransitionDidFinish,因为它会在CCNode的每个CCScene子项上调用。幸运的是,您只需检查CCTransition代码并查看它们是如何实现的,然后为层创建自己的(许多人已经完成并共享了这些)。

例如,我写了一个简单的小方法,它将使用块来提供与场景转换相同的淡入淡出效果,但是对于单个图层(以及一些添加的功能)。只需传入要隐藏的图层,淡出和淡入的速度,淡入淡出的颜色,以及隐藏图层时希望执行的块。

-(void)fadeLayer:(CCLayer*)layer withOutDuration:(float)outTime inDuration:(float)inTime color:(ccColor3B)color withBlock: (void(^)())block
{
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    CCLayerColor *toplayer = [CCLayerColor layerWithColor:ccc4(color.r, color.g, color.b, 0) width:winSize.width height:winSize.height];

    [layer addChild:toplayer z:INT_MAX];

    [toplayer runAction:
      [CCSequence actions:
       [CCFadeIn actionWithDuration:outTime],
       [CCCallBlock actionWithBlock:block],
       [CCFadeOut actionWithDuration:inTime],
       [CCCallBlockN actionWithBlock:^(CCNode *node) {
          [node removeFromParentAndCleanup:YES];
       }],
      nil]
    ];
}
相关问题