首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动画化CAEmitterCell颜色属性

动画化CAEmitterCell颜色属性
EN

Stack Overflow用户
提问于 2013-04-12 02:01:32
回答 3查看 2.7K关注 0票数 6

我有一个CAEmitterCell,我已经设置了一个特定的颜色。文档中说,这个属性是可动的。,我想为我的游戏中不同的玩家(所有的人都在一开始就选择他们的颜色)在多个不同的颜色之间动画。

这是我设置EmitterCell时的:

代码语言:javascript
复制
//
    // Emitter Cells
    //

    // 'New Emitter' cell configuration
    newEmitter = [CAEmitterCell emitterCell];
    newEmitter.scaleSpeed = 10;
    newEmitter.lifetime = 2.481715;
    newEmitter.velocity = 332.3636968085106;
    newEmitter.contents = newemitterImg;
    newEmitter.name = @"New Emitter";
    newEmitter.color = [[UIColor colorWithRed:0.50 green:0.00 blue:1.00 alpha:1.00] CGColor];
    newEmitter.scaleRange = 4.178236607142859;
    newEmitter.lifetimeRange = 1.6;
    newEmitter.greenRange = -2.775558e-17;
    newEmitter.birthRate = 40;
    newEmitter.emissionRange = -6.283185306666667;
    newEmitter.scale = 0;

    //
    // Emitter Cell Chains
    //
    emitter.emitterCells = [NSArray arrayWithObjects:newEmitter, nil];

这里是我测试颜色变化的地方--在这种情况下,只是在两种不同的颜色之间跳跃:

代码语言:javascript
复制
-(void)changeColor {

    if (color == 0) {
        color = 1;
        NSLog(@"color = 1");

        [UIView animateWithDuration:1.5 delay:0 options:0 animations:^{
            newEmitter.color = [[UIColor colorWithRed:0.50 green:0.00 blue:1.00 alpha:1.00] CGColor];
        } completion:^(BOOL finished) {[self performSelector:@selector(changeColor) withObject:nil afterDelay:2];}];
    } else {
        color = 0;
        NSLog(@"color = 0");
        [UIView animateWithDuration:1.5 delay:0 options:0 animations:^{
            newEmitter.color = [[UIColor colorWithRed:1.00 green:0.50 blue:0.10 alpha:1.00] CGColor];
        } completion:^(BOOL finished) {[self performSelector:@selector(changeColor) withObject:nil afterDelay:2];}];
    }

}

然而,当我运行这个颜色时,颜色不会改变。我是否在这里误解了“动画”的本质,还是只需要对CAEmitterCell进行不同的处理?

EN

回答 3

Stack Overflow用户

发布于 2014-04-21 22:09:47

CAEmitterCells实际上是不同的。要使动画在它们上工作,您需要采取以下步骤:

1.为您的CAEmitterCell指定名称,例如:

newEmitter.name = @"fire";

2.通过CAEmitterLayer实例访问此发射器的动画属性:

代码语言:javascript
复制
//Set first before doing CABasicAnimation so it sticks
newEmitter.redSpeed = 1.0;

//Access the property with this key path format: @"emitterCells.<name>.<property>"
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"emitterCells.fire.redSpeed"];
anim.fromValue = @(0.0);
anim.toValue = @(1.0);
anim.duration = 1.5;
anim.fillMode = kCAFillModeForwards;
[emitter addAnimation:anim forKey:@"emitterAnim"];
票数 3
EN

Stack Overflow用户

发布于 2016-05-24 07:18:59

试试这个:

代码语言:javascript
复制
    [newEmitter.emitterCells[0] setColor:[[UIColor yellowColor] CGColor]];
票数 0
EN

Stack Overflow用户

发布于 2013-05-21 06:37:49

您可以使用这些属性来绘制发射器的颜色。

代码语言:javascript
复制
newEmitter.redSpeed = 1.0;
newEmitter.greenSpeed = 1.0;
newEmitter.blueSpeed = 1.0;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15961910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档