2016-08-15 111 views
0

當前,運行此代碼時,一個彩色的球從屏幕頂部運行到底部。當它到達底部時,它在頂部重新生成並再次下降。每當它再次產生時,我需要球變成隨機顏色。我有一個colorChange動作,但它在運行時仍不會改變球的顏色。如何在每次產卵時隨機更改SKShapeNode的顏色?

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.當您將任何東西乘以0時,它仍然爲零,即使混色因子爲1.如果您計劃使用着色,則需要以白色(1,1,1, 1)。我不確定動作完成時是否設置了顏色,因此只需將填充顏色更改爲所需的顏色即可。如果您想創建過渡效果,請使用'customActionWithDuration' – Knight0fDragon

回答

1

我建議你不要使用SKShape作爲重要的棋子,因爲我發現他們可能會拖慢應用程序並導致問題。我會用SKSpritenode代替球。如果你那麼做球默認爲全白,你可以這樣做改變顏色:

ball.colorBlendFactor = 1 

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

色調應該是0和1

之間的隨機值,如果你把這個函數內部,你可以調用函數來改變球內部和SKAction或其他地方的顏色。