使用SKAction定期更改SKScene的背景颜色

时间:2014-09-06 19:27:18

标签: sprite-kit

我试图每隔10秒定期更改SKScene节点的背景颜色。我正在使用SKAction将SKScene背景颜色淡化为随机生成的新颜色,淡入淡出动作持续4秒。现在,我尝试的实现使用'helper'SKSpriteNode:

  1. 获取使用的新背景
  2. 设置其颜色
  3. 对其应用alpha淡入淡出动作
  4. 并将其设置为SKScene节点树中的第一个节点
  5. 此外,我还有一些时间来保存代码,以确保我的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);
    
    }
    

    有没有人有任何想法我做错了什么?

1 个答案:

答案 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,否则颜色可能根本不会渲染,因为它完全透明。