我看到的关于如何使用过渡的每个例子都是这样的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保持过渡?
提前感谢您的帮助。
答案 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]
];
}