【问题标题】:How to change color of SKShapeNode randomly each time spawned?每次生成时如何随机更改 SKShapeNode 的颜色?
【发布时间】:2016-12-21 22:48:15
【问题描述】:

目前,在运行此代码时,一个彩色球会从屏幕顶部运行到底部。当它到达底部时,它会在顶部重生并再次下降。每次重新生成时,我都需要将球更改为随机颜色。我有一个colorChange 动作,但它在运行时仍然不会改变球的颜色。

import SpriteKit

class GameScene: SKScene {



    let ball = SKShapeNode(circleOfRadius: 20)
    let label = SKLabelNode(fontNamed: "Futura")

    let colorChange = SKAction.colorizeWithColor(.blueColor(), colorBlendFactor: 1, duration: 1)


    let randomRed = Int(arc4random_uniform(255))
    let randomGreen = Int(arc4random_uniform(255))
    let randomBlue = Int(arc4random_uniform(255))

    override func didMoveToView(view: SKView) {

        let sceneBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
        self.physicsBody = sceneBody

        //Ball Transition
        let ballTransition = SKAction.sequence([SKAction.fadeInWithDuration(1)])
        ball.runAction(ballTransition)

        ball.fillColor = UIColor(red: 100, green: 100, blue: 0, alpha: 1)
        ball.physicsBody = SKPhysicsBody(circleOfRadius: 25)
        ball.physicsBody?.affectedByGravity = false

        ball.position = CGPoint(x: self.frame.size.width/2, y: CGFloat(self.frame.size.height*1))

        ballMovement()

        self.addChild(ball)

        self.addChild(label)
    }

    func ballMovement() {
        let moveBall = SKAction.moveToY(0, duration: 3)
        let goBackUp = SKAction.moveToY(self.frame.size.height, duration:0)
        let keepFalling = SKAction.sequence([moveBall, goBackUp, colorChange])
        ball.runAction(SKAction.repeatActionForever(keepFalling))

        //Label Sprite
        label.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
        label.fontColor = SKColor.redColor()
        label.fontSize = 30
    }




    override func update(currentTime: CFTimeInterval) {

        label.text = "\(ball.position.y)"

        if ball.position.y < 26 {
            ball.position = CGPoint(x: self.frame.size.width/2, y: CGFloat(self.frame.size.height*1))
        }
    }


}

【问题讨论】:

  • 您的填充颜色蓝色为 0。当您将任何内容乘以 0 时,它仍然为零,即使颜色混合因子为 1。如果您打算使用 colorize,则需要从白色(1 ,1,1,1)。我不确定该操作是否在完成时设置颜色,因此只需将填充颜色更改为您想要的颜色。如果要制作过渡效果,请使用customActionWithDuration

标签: sprite-kit skaction arc4random skshapenode


【解决方案1】:

不要使用 SKAction 来改变颜色,而是这样做

ball.color = UIColor...

要生成随机颜色,请查看:How to make a random background color with Swift

并使用它来生成随机颜色

ball.color = .randomColor()

【讨论】:

    【解决方案2】:

    我建议您不要将 SKShape 用于移动的重要部分,因为我发现它们会减慢应用程序并导致问题。我会用 SKSpritenode 代替球。如果您随后将球默认为全白色,则可以通过以下操作更改颜色:

    ball.colorBlendFactor = 1
    
    ball.color = SKColor(hue: randomNumberFunctionBetweenZeroAndOne(), saturation: 0.75, contrast: 0.5) 
    

    色调应该是 0 到 1 之间的随机值。

    如果你把它放在一个函数里面,你可以调用这个函数来改变里面的球和 SKAction 或其他任何地方的颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-07
      • 2023-01-05
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多