1

我看到的关于如何使用转换的每个示例都是这样的 CCScene:

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

我的应用程序设置有 GameScene、MenuScene 等。在 GameScene 中,我设置了 DPad 和 HUD,在此之下,我让英雄移动到 CCNode 类型的不同关卡。我想使用本机转换从一个级别移动到下一个级别。

我发现了一个与我在这里需要的问题类似的问题,但该用户基本上被告知要自己构建过渡。

令我困惑的是 CCNode 包含一个名为的方法:

- (void) onEnterTransitionDidFinish

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

提前感谢您的帮助。

4

1 回答 1

0

CCTransitions专门用于场景。CCNodescontains onEnterTransitionDidFinish,因为它被调用CCNodea 的每个孩子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]
    ];
}
于 2013-05-24T15:28:54.250 回答