我有一个SKSpriteNode,我用 baseNode.runAction(SKAction.fadeOutWithDuration(0.5))
淡出它
这个sprite有一个子节点。还有一个SKSpriteNode。(图中的红色块)
当baseNode淡出时,会有子节点的轮廓。
避免这种情况并同时淡出整个节点和它的子节点的最佳方法是什么?我想在子节点中播放纹理动画。所以压平不是解决方案。
我有一个SKSpriteNode,我用 baseNode.runAction(SKAction.fadeOutWithDuration(0.5))
淡出它
这个sprite有一个子节点。还有一个SKSpriteNode。(图中的红色块)
当baseNode淡出时,会有子节点的轮廓。
避免这种情况并同时淡出整个节点和它的子节点的最佳方法是什么?我想在子节点中播放纹理动画。所以压平不是解决方案。
SKView
类中。@interface SKSpriteNode (Fading)
- (void)flattenForFading;
@end
...
#import "SKSpriteNode+Fading.h"
@implementation SKSpriteNode (Fading)
- (void)flattenForFading {
SKTexture *flattenedContents = [self.scene.view textureFromNode:self];
/// Copy the children array, so when we are iterating the removing doesn't cause any problems
NSArray *children = [self.children copy];
for (SKNode *child in children) {
[child removeFromParent];
}
self.texture = flattenedContents;
self.size = self.texture.size;
}
@end
baseNode.runAction(SKAction.fadeOutWithDuration(0.5))
for node in baseNode.children as! [SKSpriteNode]
{
node.runAction(SKAction.fadeOutWithDuration(0.5))
}
为了在屏幕之间实现平滑的过渡效果,一个很酷的方法是使用黑色节点覆盖整个屏幕,然后淡出。我想到了以下方法:Swift 3
import SpriteKit
override func didEnter(from previousState: GKState?) {
let blackNode = SKSpriteNode(color: SKColor.black, size: scene.size)
blackNode.position = CGPoint(x: scene.size.width / 2, y: scene.size.height / 2)
blackNode.zPosition = Layer.top.rawValue
scene.worldNode.addChild(blackNode)
blackNode.alpha = 1.0
blackNode.run(SKAction.fadeOut(withDuration: 0.5)) }
我曾经苦苦寻找这个解决方案,所以我希望这可以帮助到其他人。谢谢。
在子节点上使用colorizeWithColor(_:colorBlendFactor:duration:),而不是fadeOutWithDuration(),如何?
colorizeWithColor(_:colorBlendFactor:duration:) 创建一个动画,用于动画化精灵的颜色和混合因子。SKAction.colorizeWithColor(SKColor.clearColor(), colorBlendFactor: 1.0, duration: 1)
,但子节点仍然透过它显示出来。 - Jonas Ester