我想淡化CCLayerColor,这看起来很简单,但它不起作用......这就是我所做的:
LoadingScreen.h
@interface LoadingScreen : CCLayerColor{
}
-(id)init;
-(void)setOpacity:(GLubyte)opacity;
@end
LoadingScreen.m
@implementation LoadingScreen
-(id)init{
if ((self=[super initWithColor:ccc4(66 , 66, 66, 255)])){
self.isTouchEnabled = NO;
}
return self;
}
-(void)setOpacity:(GLubyte)opacity{
for( CCNode *node in [self children] )
{
if( [node conformsToProtocol:@protocol(CCRGBAProtocol)] )
{
NSLog(@"conforms to protocol!");
[(id<CCRGBAProtocol>) node setOpacity: opacity];
}
}
}
@end
GameLayer.m
-(id)init{
timer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(checkIfLoaded) userInfo:nil repeats:YES];
}
-(void)checkIfLoaded{
NSLog(@"still doing stuff");
if(doneInitializing ==YES){
NSLog(@"done");
[timer invalidate];
NSLog(@"FADE NOW !!!!");
id fade = [CCFadeOut actionWithDuration:2.5];
[loadingLayer runAction:fade];
[self performSelector:@selector(removeLoadingLayer) withObject:nil afterDelay:3.5];
}
if(loadingScreenPushed == NO && doneInitializing == NO){
NSLog(@"adding Layer");
loadingScreenPushed = YES;
loadingLayer = [LoadingScreen node];
[self addChild:loadingLayer z:10];
}
}
答案 0 :(得分:1)
据我记忆,淡入淡出动作根据当前的不透明度值计算每个刻度新的不透明度。您将标准CCLayerColor setOpacity方法替换为新方法。尝试添加
[super setOpacity: opacity];
到你的setOpacity:方法。
答案 1 :(得分:0)
1:为什么要创建一个名为LoadingScreen
的不同的类...它看起来有点多余,最好的是:在CCColorLayer
中声明一个变量类型GameLayer
,这就是它和只需用.. loadingScreen=[CCColorLayer layerWithColor...etc]
初始化它..它更适合优化,并且它是自动释放的。
第二名:替换
id fade = [CCFadeOut actionWithDuration:2.5];
[loadingLayer runAction:fade];
with:[loadingLayer runAction:[CCFadeOut actionWithDuration:2.5]];
(它更快)
第三:试试这个:
if(loadingScreenPushed == NO && doneInitializing == NO){
//stuff
}else if(doneInitializing ==YES){
//stuff
}
我认为你在做的是检查屏幕上是否添加了图层并将其删除...但是你不能在屏幕上显示图层...因为你以后添加它...所以是的......反过来,一切都应该有效。
答案 2 :(得分:0)
出于这个原因,我进行了一些自己的研究,原因与the_critic首先提出该问题相同,至少可以说我得到的结果令人惊讶。我正在为iPad iOS 8.4进行构建: 1)似乎在CALayer的子类的子类上的'super setOpacity'不起作用! (我从可以想象的各个方向进行了攻击)。 2)当setOpacity调用失败时,获取CALayer子类的子类的不透明度值会返回正确的值。
即:
@interface IntermediateLayerType : CALayer.....
@interface FinalLayerType : IntermediateLayerType....
使用FinalLayerType的某些方法...
[self setOpacity:1.0f];
[super setOpacity:0.0f];
NSLog(@"The opacity set was: %f", [self opacity]);
给出答案:“不透明度设置为:1.0” 我认为您遇到了同样的错误! 我的解决方法如下:
使用相同的“某种方法”。...
CALayer *myBaseInstance = (CALayer *)self;
[myBaseInstance setOpacity:0.0f];
这花了我一天半的开发时间,为我工作。 希望这对其他iPad开发人员有所帮助。 VV。