问题描述
我正在使用SpriteKit进行游戏。我正在使用SKShapeNode绘制一个形状。现在我想设置其颜色变化的动画,但SKActions不适用于SKShapeNode。有没有办法做到这一点,或者我必须采用不同的方法?
I'm working on a game with SpriteKit. I'm drawing a shape with SKShapeNode. Now I want to animate its colour change but the SKActions is not working for SKShapeNode. Is there any way to do this or I have to use a different approach?
谢谢。
编辑:
感谢,我能够想出来这个快速(并且完全不完美)的解决方案。
Thanks to LearnCocos2D I was able to come up with this quick (and totally not perfect) solution.
int groundChangeInterval = 5;
SKColor *originalColor = [SKColor colorWithRed:0.92 green:0.87 blue:0.38 alpha:1.0];
SKColor *finalColor = [SKColor colorWithRed:0.29 green:0.89 blue:0.31 alpha:1.0];
CGFloat red1 = 0.0, green1 = 0.0, blue1 = 0.0, alpha1 = 0.0;
[originalColor getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1];
CGFloat red2 = 0.0, green2 = 0.0, blue2 = 0.0, alpha2 = 0.0;
[finalColor getRed:&red2 green:&green2 blue:&blue2 alpha:&alpha2];
SKAction *changeGroundColor = [SKAction customActionWithDuration:groundChangeInterval actionBlock:^(SKNode *node, CGFloat elapsedTime) {
CGFloat step = elapsedTime/groundChangeInterval;
CGFloat red3 = 0.0, green3 = 0.0, blue3 = 0.0;
red3 = red1-(red1-red2)*step;
green3 = green1-(green1-green2)*step;
blue3 = blue1-(blue1-blue2)*step;
[(SKShapeNode*)node setFillColor:[SKColor colorWithRed:red3 green:green3 blue:blue3 alpha:1.0]];
[(SKShapeNode*)node setStrokeColor:[SKColor colorWithRed:red3 green:green3 blue:blue3 alpha:1.0]];
}];
我只需淡化两种特定颜色,因此它不是通用的解决方案,但现在已经足够了。
I only needed to fade two specific colours so it is not a universal solution but it is enough for now.
谢谢
推荐答案
使用 customActionWithDuration :block:
并更改 fillColor
或 strokeColor
属性。
我认为着色操作不起作用,因为SKShapeNode没有 color
属性。值得尝试将此属性添加到子类或类别中的类,并将其重定向到 fillColor
或 strokeColor
或两个。
I suppose the colorize actions won't work because SKShapeNode has no color
property. It's worth a try to add this property to the class in a subclass or category and redirect it to fillColor
or strokeColor
or both.
这篇关于SKShapeNode - 动画颜色变化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!