首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKNode()对SKCropNode()子节点的衰落作用

SKNode()对SKCropNode()子节点的衰落作用
EN

Stack Overflow用户
提问于 2016-02-25 18:43:18
回答 1查看 330关注 0票数 0

我有一个SKNode(),它有SKCropNode()子函数。我能够运行所有类型的动作来旋转和缩放我的SKNode(),但是当我想要使用任何类型的衰落动作时,结果总是alpha 1或alpha 0。不会褪色的。

通过将SKCropNode()替换为SKShapeNode(),衰落操作运行良好。

有人能告诉我为什么吗?难道不可能褪色隐藏的节点吗?

代码语言:javascript
复制
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: {})

}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-27 13:37:50

正如注释中提到的:SKCropNode使用alpha < 0.5来不绘制。>= 0.5绘制,您不能设置混合模式,所以它可能是做源混合模式。这意味着它正在覆盖阿尔法。孩子们后来就混在一起了。

播放机上下文被创建,它绘制给定的alpha,然后绘制SKCropNode,覆盖alpha而不是混合。

在你的孩子身上运行淡出动作,而不是你的父母来得到你想要的结果。

以下是您的源代码在更改时的样子:

代码语言:javascript
复制
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: {})

    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35635641

复制
相关文章

相似问题

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