在iPhone的cocos2d中,在一个场景中,我如何淡出一个图层并淡入另一个图层?
我的想法是我有一个屏幕:
现在,一旦用户点击任何分页控件,我想淡出当前页面的内容层(但保留分页图层),并淡入下一页的内容层。它们都是相同的层,它们基于currentPage
变量从plist中提取数据,因此我需要刷新图层。
我知道,对于场景,在调用replaceScene
时,您可以指定过渡效果。这样做就可以了。但显然,它也会淡化分页控件,这看起来很愚蠢。那么它对图层有什么作用呢?
答案 0 :(得分:1)
hmmm ....使用CCLayerColor(它实现CCRGBAProtocol协议),淡入淡出将传播到其中的任何对象。然后做这样的事情:
-(void) buttonTouchedCallBack{
id out = [CCFadeTo actionWithDuration:.35 opacity:0];
id callFunc = [CCCallFunc actionWithTarget:self selector:@selector(changeContent)];
id in = [CCFadeTo actionWithDuration:.35 opacity:255];
id enableMenus = [CCCallFunc actionWithTarget:self selector:@selector(layerInView)];
_menu.isTouchEnabled=NO;
[_contentLayer stopAllActions];
[_contentLayer runAction:[CCSequence actions:out,callFunc,in,enableMenus,nil]];
}
-(void) changeContent{
// do your stuff here
}
-(void) layerInView{
_menu.isTouchEnabled=YES;
// and anything else that is appropriate
}
答案 1 :(得分:0)
我认为你可以使用runAction:
让你的CCLayer
做CCAction
(例如CCFadeIn
和CCFadeOut
),这样你就可以实现目标你想要的。
您需要两个内容层来分别保存当前页面(页面A)和下一页面页面(页面B)。在两个内容层的淡出操作结束后,您可以清理页面A.
答案 2 :(得分:0)
我写了一个小函数,它将使用块来提供与场景转换相同的淡入淡出效果,但对于单个图层。只需传入要隐藏的图层,淡出和淡入的速度,淡入淡出的颜色,以及隐藏图层时希望执行的块。
-(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]];
}