我试图每隔10秒定期更改SKScene节点的背景颜色。我正在使用SKAction将SKScene背景颜色淡化为随机生成的新颜色,淡入淡出动作持续4秒。现在,我尝试的实现使用'helper'SKSpriteNode:
此外,我还有一些时间来保存代码,以确保我的SKScene上的背景颜色每10秒更换一次。这意味着如果我假设SpriteKit的目标是60FPS,那么背景颜色应该每600秒更换一次。由于每个背景颜色淡入淡出动作应该持续4秒,因此每个淡入淡出应该花费240秒(再次假设60FPS以保持简单)。基本上,会有360秒的时间段,背景颜色没有任何变化。
无论如何,我似乎无法将我的代码当前工作,因为颜色根本没有变化。我为SKScene设置的默认背景颜色(在我的init方法中)是RGB白色。这是显示每个帧的唯一颜色。此外,'timeSinceUpdateCalled'和'timeSinceTheLastBackgroundColorChange'最初都设置为0.0 一切都是从SKScene的-update:(CFTimeInterval)方法驱动的。代码如下:
-(void)update:(CFTimeInterval)currentTime {/* Called before each frame is rendered. Basically, any actions taken on the title scene will go in here*/
CFTimeInterval timeSinceUpdate = currentTime - self.timeSinceUpdateCalled;
self.timeSinceUpdateCalled = currentTime;
[self changeBackgroundTitleColorEverySoOften:timeSinceUpdate];
}
-(void)changeBackgroundTitleColorEverySoOften:(CFTimeInterval)timeSinceUpdate{
self.timeSinceTheLastBackGroundColorChange += timeSinceUpdate;
if(self.timeSinceTheLastBackGroundColorChange > 10.0){
self.timeSinceTheLastBackGroundColorChange = 0;
[self renderNewTitleBackGroundColor];
}
}
-(void)renderNewTitleBackGroundColor{
_batball_titlehelpersprite = [[SKSpriteNode alloc] initWithColor:self.colorGenerator size:self.view.bounds.size];
_batball_titlehelpersprite.alpha = 0.0;
SKAction* titleactioncolorfade = [SKAction fadeInWithDuration:4];
titleactioncolorfade.speed = 1.0;
[_batball_titlehelpersprite runAction:titleactioncolorfade];
[self insertChild:_batball_titlehelpersprite atIndex:1];
}
-(UIColor* )colorGenerator{//This method generates a random UIColor
UIColor* generatedColor = nil;//The generated random color
generatedColor = [UIColor colorWithRed:[BatBallUtils randomFloat2:255] green:[BatBallUtils randomFloat2:255] blue:[BatBallUtils randomFloat2:255] alpha:0.0];//Generate a random color
return generatedColor;
}
我介绍了这段代码,似乎一切都应该有效。我的UIColor生成器代码也按预期工作。这是我用来为RGB生成2到255之间的随机浮点数的代码:
+(float)randomFloat2:(int)maxNum{//Generate a random float number between two floating point min and max numbers
float num = (arc4random() % maxNum) / (float)maxNum;
return(num);
}
有没有人有任何想法我做错了什么?
答案 0 :(得分:0)
UIColor值的范围为0.0到1.0,请参阅https://developer.apple.com/library/ios/documentation/uikit/reference/UIColor_Class/Reference/Reference.html#//apple_ref/occ/clm/UIColor/colorWithRed:green:blue:alpha:
另外一定要使用1.0作为alpha,否则颜色可能根本不会渲染,因为它完全透明。