2016-08-15 14 views
0

現在のところ、このコードを実行すると、色のついたボールが画面の上部から下部に向かって表示されます。それが底に達すると、それは上にrespawnsし、再び落ちます。ボールが再び出現するたびにランダムな色に変更する必要があります。私は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の場合でも0のままです。colorizeを使用する予定がある場合は、白(1,1,1、 1)。完了時にアクションがカラーを設定するかどうかはわかりませんので、代わりに塗りつぶしカラーを目的のカラーに変更してください。トランジションエフェクトを作成する場合は、 'customActionWithDuration'を使用してください – Knight0fDragon

答えて

1

代わりの色を変更するにはSKActionを使用して、ちょうどこれをチェックランダムな色を生成するには

ball.color = UIColor... 

の操作を行います。How to make a random background color with Swift

をし、ランダムな色

を生成するためにそれを使用
ball.color = .randomColor() 
1

移動する重要な部分にSKShapeを使用しないことをお勧めします私は彼らがアプリを遅くし、問題を引き起こすことがわかります。私はボールの代わりにSKSpritenodeを使用します。あなたは、すべての白とボールのデフォルトを作る場合、あなたはこれを行うことによって、色を変更することができます。

ball.colorBlendFactor = 1 

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

あなたが関数内でこれを置く場合は色相が0と1

間のランダムな値である必要がありますあなたはボールの色やSKActionなどの色を変更する関数を呼び出すことができます。

関連する問題