首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >colorizeWithColor和SKLabelNode

colorizeWithColor和SKLabelNode
EN

Stack Overflow用户
提问于 2013-11-01 01:17:19
回答 3查看 4.2K关注 0票数 2

根据文档,SKAction colorizeWithColor:只使用SKSpriteNode,那么我们如何处理SKLabelNode呢?SKLabelNode具有可以静态设置的colorcolorBlendFactor属性。有什么方法可以用SKAction动画吗?

我目前的方法是使用SKView的实例方法textureFromNode将一个textureFromNode呈现为纹理,但只需从该atm中获取零纹理:-(

更新:你知道些什么。我想我发现了纹理渲染的问题。在SKScene的init方法中不可能对纹理进行redner,因为在这一点上self.view为零。所以我尝试了在didMoveToView和瞧,纹理渲染。无论如何,谢谢-)

EN

回答 3

Stack Overflow用户

发布于 2014-11-19 01:51:21

也许有人会发现这很有用。

代码语言:javascript
运行
复制
   func changeColorForLabelNode(labelNode: SKLabelNode, toColor: SKColor, withDuration: NSTimeInterval) {
    labelNode.runAction(SKAction.customActionWithDuration(withDuration, actionBlock: {
      node, elapsedTime in

      let label = node as SKLabelNode

      let toColorComponents = CGColorGetComponents(toColor.CGColor)
      let fromColorComponents = CGColorGetComponents(label.fontColor.CGColor)

      let finalRed = fromColorComponents[0] + (toColorComponents[0] - fromColorComponents[0])*CGFloat(elapsedTime / CGFloat(withDuration))
      let finalGreen = fromColorComponents[1] + (toColorComponents[1] - fromColorComponents[1])*CGFloat(elapsedTime / CGFloat(withDuration))
      let finalBlue = fromColorComponents[2] + (toColorComponents[2] - fromColorComponents[2])*CGFloat(elapsedTime / CGFloat(withDuration))
      let finalAlpha = fromColorComponents[3] + (toColorComponents[3] - fromColorComponents[3])*CGFloat(elapsedTime / CGFloat(withDuration))

      labelNode.fontColor = SKColor(red: finalRed, green: finalGreen, blue: finalBlue, alpha: finalAlpha)
    }))
  }

您甚至可以检查本演示中使用的此函数的结果:https://www.youtube.com/watch?v=ZIz8Bn0-hUA&feature=youtu.be

我决定在这里写一个简短的很好的解决方案,但是如果您需要更多的细节,请查看这个问题:SKAction.colorizeWithColor makes SKLabelNode disappear

票数 4
EN

Stack Overflow用户

发布于 2014-10-05 02:43:39

SKLabelNode还有一个可以设置的fontColor属性。但是,它不响应colorizeWithColor方法。

但是,您仍然可以通过与另一个SKSpriteNode颜色同步来动态地更改文本的颜色。如果您在雪碧上调用colorizeWithColor,字体颜色会随之变化。这包括指定持续时间内的颜色转换。示例:

代码语言:javascript
运行
复制
    [_tileCountLabel runAction:[SKAction repeatActionForever:
                            [SKAction customActionWithDuration:COLOR_TRANSITION_SPEED actionBlock:^(SKNode *node, CGFloat elapsedTime) {
    _tileCountLabel.fontColor = _tileLayer0.color;
}]]];

此外,我尝试使用SKCropNode掩码来尝试通过父SKSpriteNode设置字体颜色。colorizeWithColor方法在SKSpriteNode上工作,但是字体严重损坏和粗壮。所以没什么用。

票数 3
EN

Stack Overflow用户

发布于 2014-03-03 12:41:05

如果要对SKLabelNode进行着色,可以尝试使用该标签作为掩码并对背景进行着色:

代码语言:javascript
运行
复制
SKSpriteNode *background = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(200.0, 200.0)];
SKAction *turnRed = [SKAction colorizeWithColor:[UIColor redColor] colorBlendFactor:1.0 duration:2.0];

SKCropNode *cropNode = [SKCropNode node];
cropNode.maskNode = [yourAwesomeLabel copy];
[cropNode addChild:background];

[background runAction:turnRed];

[self addChild:cropNode];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19719367

复制
相关文章

相似问题

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