【问题标题】:Fading action of SKNode() with SKCropNode() childrenSKNode() 与 SKCropNode() 子节点的衰落动作
【发布时间】:2016-02-25 18:43:18
【问题描述】:

我有一个具有 SKCropNode() 子节点的 SKNode()。我可以运行各种动作来旋转和缩放我的 SKNode(),但是当我想使用任何类型的淡入淡出动作时,结果总是 alpha 1 或 alpha 0。无法淡入淡出。

通过将 SKCropNode() 替换为 SKShapeNode(),褪色操作可以正常工作。

谁能告诉我为什么?是否可以淡化被屏蔽的节点?

import SpriteKit

class GameScene: SKScene {

let player = SKNode()
let playerSize = CGFloat(50)
let playerCrop = SKCropNode()
let playerMask = SKSpriteNode(color: SKColor.blackColor(), size: CGSizeMake(CGFloat(100), CGFloat(100)))
let playerCircle = SKShapeNode(circleOfRadius: CGFloat(100))

let playerCenterMask = SKShapeNode(circleOfRadius: CGFloat(100))
let playerCenterCrop = SKCropNode()

override func didMoveToView(view: SKView) {

    backgroundColor = SKColor.blackColor()

    player.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
    player.alpha = 0
    addChild(player)

    playerCenterMask.lineWidth = 20        
    playerCenterCrop.maskNode = playerCenterMask

    playerMask.position.x = -playerSize
    playerMask.position.y = playerSize
    playerCircle.lineWidth = 0
    playerCircle.fillColor = SKColor.redColor()
    playerCrop.addChild(playerCircle)
    playerCrop.maskNode = playerMask

    playerCenterCrop.addChild(playerCrop)
    player.addChild(playerCenterCrop)

    // Animations
    let playerScale = SKAction.scaleTo(2.0, duration: 5)
    let playerFadeIn = SKAction.fadeInWithDuration(5)
    let playerAnimation = SKAction.group([playerScale,playerFadeIn])

    player.runAction(playerAnimation, completion: {})

}

}

【问题讨论】:

  • 你能把你的代码贴出来让我试试
  • 谢谢,我已经添加了一些示例代码:)
  • 尝试将蒙版设置为清除颜色,而不是黑色,alpha 的值为 1,所以你说的是裁剪所有 alpha
  • 感谢您的帮助。将遮罩设置为 clearcolor 只会导致不再遮罩。
  • 那么你想要相反的东西,所有蒙面的都是白色的,没有蒙面的都是透明的

标签: swift sprite-kit swift2


【解决方案1】:

如 cmets 中所述: SKCropNode 使用 alpha = 0.5 绘制,不能设置混合模式,所以可能是在做源混合模式。这意味着它正在覆盖 alpha。之后孩子们就混在一起了。

创建玩家上下文,它在给定的 alpha 处绘制,然后绘制 SKCropNode,覆盖 alpha 而不是混合。

对您的孩子而不是您的父母运行淡入操作以获得您正在寻找的结果。

这是您的源代码经过更改后的样子:

import SpriteKit

class GameScene: SKScene {

    let player = SKNode()
    let playerSize = CGFloat(50)
    let playerCrop = SKCropNode()
    let playerMask = SKSpriteNode(color: SKColor.blackColor(), size: CGSizeMake(CGFloat(100), CGFloat(100)))
    let playerCircle = SKShapeNode(circleOfRadius: CGFloat(100))

    let playerCenterMask = SKShapeNode(circleOfRadius: CGFloat(100))
    let playerCenterCrop = SKCropNode()

    override func didMoveToView(view: SKView) {

        backgroundColor = SKColor.blackColor()

        player.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
        player.alpha = 1
        addChild(player)
        playerCircle.alpha = 0
        playerCenterMask.lineWidth = 20
        playerCenterCrop.maskNode = playerCenterMask

        playerMask.position.x = -playerSize
        playerMask.position.y = playerSize
        playerCircle.lineWidth = 0
        playerCircle.fillColor = SKColor.redColor()
        playerCrop.addChild(playerCircle)
        playerCrop.maskNode = playerMask
        playerCenterCrop.addChild(playerCrop)
        player.addChild(playerCenterCrop)

        // Animations
        let playerScale = SKAction.scaleTo(2.0, duration: 5)
        let playerFadeIn = SKAction.fadeInWithDuration(5)
        let playerAnimation = playerScale

        player.runAction(playerAnimation, completion: {})
        playerCircle.runAction(playerFadeIn, completion: {})

    }

}

【讨论】:

  • 非常感谢 :) 这绝对是我正在寻找的结果!你救了我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多