Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标c-动画场景的背景色_Ios_Objective C_Animation_Sprite Kit - Fatal编程技术网

Ios 目标c-动画场景的背景色

Ios 目标c-动画场景的背景色,ios,objective-c,animation,sprite-kit,Ios,Objective C,Animation,Sprite Kit,您将如何设置场景背景色的动画?我尝试过UIView动画,但毫不奇怪它不起作用。在雪碧套件中有类似的工具吗 我正在寻找类似的东西,但对于雪碧套件: [UIView animateWithDuration:0.25 animations:^{ self.backgroundColor = [UIColor redColor]; }]; 目前,作为一种变通方法,我将UIView覆盖在SKView之上,但我希望有更灵活的方式 我对雪碧套件还比较陌生,所以如果这是非常简单的事情,我会道歉 目前我有

您将如何设置场景背景色的动画?我尝试过UIView动画,但毫不奇怪它不起作用。在雪碧套件中有类似的工具吗

我正在寻找类似的东西,但对于雪碧套件:

[UIView animateWithDuration:0.25 animations:^{
   self.backgroundColor = [UIColor redColor];
}];
目前,作为一种变通方法,我将UIView覆盖在SKView之上,但我希望有更灵活的方式

我对雪碧套件还比较陌生,所以如果这是非常简单的事情,我会道歉

目前我有:

-(id) initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {
        _bg = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithRed:0.13 green:0.13 blue:0.13 alpha:1] size:self.size];
        _bg.position = CGPointMake(self.size.width/2, self.size.height/2);
        [self addChild:_bg];
    }
    return self;
}

-(void) colorise :(UIColor*)color {
    [_bg runAction:[SKAction colorizeWithColor:color colorBlendFactor:_bg.colorBlendFactor duration:1]];
}
同样在初始化SKView之后,我将根据NSUserDefault值设置bg精灵的颜色

 if ([[NSUserDefaults standardUserDefaults] integerForKey:@"currGameMode"] == 0) {
((bubbleAnimation2*)_bubbleEffectView.scene).bg.color = [UIColor colorWithRed:0.13 green:0.13 blue:0.13 alpha:1];}
else {((bubbleAnimation2*)_bubbleEffectView.scene).bg.color = [UIColor colorWithRed:0.25 green:0.13 blue:0.13 alpha:1];}

谢谢

嗯,我想出了一个完全过度设计的解决方案!我有一个背景精灵数组,我克隆了原始精灵,改变了它的颜色,然后在其中设置了动画

这是我的密码:

-(void) colorise :(UIColor*)color {
   // [_bg runAction:[SKAction colorizeWithColor:color colorBlendFactor:_bg.colorBlendFactor duration:1]];
    if ([_bgObjects count] != 0) {
        SKSpriteNode* newBg = [[_bgObjects objectAtIndex:0] copy];
        newBg.color = color;
        newBg.alpha = 0;
        [self insertChild:newBg atIndex:1];
        [newBg runAction:[SKAction fadeAlphaTo:1 duration:0.5]];
        [_bgObjects addObject:newBg];

        for (int i = 0; i < ([_bgObjects count]-1); i++) {
            [[_bgObjects objectAtIndex:i] runAction:[SKAction fadeAlphaTo:0 duration:0.5]];
        }

    }
}

-(void) update:(NSTimeInterval)currentTime {
    if ([_bgObjects count] > 1) {

    NSMutableArray* toDelete = [NSMutableArray arrayWithObjects: nil];

    for (SKSpriteNode* bg in _bgObjects) {
        if ((bg.alpha == 0) && !bg.hasActions) {
            [bg removeFromParent];
            [toDelete addObject:bg];
        }} [_bgObjects removeObjectsInArray:toDelete];
    }
}
-(void)着色:(UIColor*)颜色{
//[_bgrunaction:[SKAction colorizeWithColor:color-colorBlendFactor:_bg.colorBlendFactor持续时间:1];
如果([\u bgObjects count]!=0){
SKSpriteNode*newBg=[[u bgObjects objectAtIndex:0]复制];
newBg.color=颜色;
newBg.alpha=0;
[自我插入儿童:新生儿指数:1];
[newBg runAction:[SKAction fadeAlphaTo:1持续时间:0.5];
[\u bgObjects addObject:newBg];
对于(int i=0;i<([\u bg对象计数]-1);i++){
[[[u bgObjects objectAtIndex:i]运行操作:[SKAction fadeAlphaTo:0持续时间:0.5]];
}
}
}
-(无效)更新:(NSTimeInterval)当前时间{
如果([\u bgObjects count]>1){
NSMUTABLEARRY*toDelete=[NSMUTABLEARRY arrayWithObjects:nil];
用于(SKSpriteNode*bg in_bg对象){
如果((bg.alpha==0)和&!bg.hasActions){
[bg从父代移除];
[toDelete addObject:bg];
}}[\u bgObjects removeObjectsInArray:toDelete];
}
}

添加一个完整的场景SpriteNode,并使用例如SKAction的colorizeWithColor?太棒了,谢谢!我想我是想得太多了。我只是有点惊讶,雪碧套件中没有任何东西能让这件事变得简单一点。嗯。。事实上,它并没有像预期的那样工作,它会淡出颜色,然后变成不同的颜色。我已经将代码添加到OP中