2016-08-15 10 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을 곱하면 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을 사용하지 말 것을 제안합니다. 내가 그 (것)들이 app를 감속하고 문제를 일으키는 원인이되는 찾아내는 원인. 나는 공을 대신 SKSpritenode를 사용할 것이다. 당신이 모든 흰색으로 볼 기본을하면, 당신은이 작업을 수행하여 색상을 변경할 수 있습니다 : 당신이 함수 내에서이 문제를 넣으면

ball.colorBlendFactor = 1 

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

색조는 0

1 사이의 임의의 값이어야한다 , 당신은 SKAction이나 그 밖의 다른 곳에서 볼의 색깔을 바꾸는 함수를 호출 할 수 있습니다.