2016-06-14 1 views
0

매우 구체적인 문제가 있습니다.스프라이트는 무작위로 색칠하지만 제한이 필요합니다.

나는 6 개의 직사각형을 가지고 있습니다.

[] = 직사각형.

[화면의 [] [] [] [] []과 같은 형식입니다. 모두 빨간색, 녹색, 파란색 사이의 임의의 색상이어야합니다.

 var colorize1 = SKAction.colorizeWithColor(.redColor(), colorBlendFactor: 1.0, duration: 0.1) 

     var colorize2 = SKAction.colorizeWithColor(.greenColor(), colorBlendFactor: 1.0, duration: 0.1) 

     var colorize3 = SKAction.colorizeWithColor(.blueColor(), colorBlendFactor: 1.0, duration: 0.1) 

     var actions = [colorize1, colorize2, colorize3] 

     var randomIndex = Int(arc4random_uniform(3)) 

     var action = actions[randomIndex] 





     greenWall1.runAction(action) 
     greenWall2.runAction(action) 

이 코드는 그렇게합니다. 하지만 다음 색과 같은 색을 사용할 수는 없습니다.

[Wall1] Wall2] Wall3] Wall4] Wall5] Wall6]

1 및 2 쌍이다. 3과 4는 쌍입니다.

벽 1과 벽 2는 쌍이므로 동일한 색상이어야합니다. 3과 4는 다른 임의의 색상이어야합니다. 5와 6은 WallPair1과 WallPair2와 다를 수 있습니다.

지금 당장은 각 쌍마다 같은 색을 최대 3 개까지 표시합니다. 아마 모든 빨강.

"예를 들어 페어 1 (wall1 및 wall2)이 빨간색이면 두 번째 쌍 (wall3 및 wall4)과 세 번째 쌍 (wall5 및 wall6)은 빨간색 일 수 없습니다. .

나는 당신이 양동이를 확인하십시오. 당신의 도움을

감사합니다.

+0

당신의 마지막 두 줄은 당신이 이미 greenWall1, greenWall2, redWall1 등의 노드를 만들었다는 것을 의미하기 때문에 약간 덜 명확합니다. 분명히 _these_는 이름보다 다른 색상을 가질 수 있습니까? –

답변

0

을 너무 많이이 문제를 파악하고 그에서 색상을 끌어 수 없습니다. 을 colorBucket가 비어 될 때, 그것을 보충.

예 :

var colorBucket = [UIColor]() 

func randomColor() -> UIColor { 

    if colorBucket.isEmpty { 
     fillBucket() 
    } 

    let randomIndex = Int(arc4random_uniform(UInt32(colorBucket.count))) 
    let randomColor = colorBucket[randomIndex] 
    colorBucket.removeAtIndex(randomIndex) 
    return randomColor 
} 

func fillBucket() { 
    colorBucket = [UIColor.redColor(), UIColor.greenColor(), UIColor.blueColor()] 
} 

테트리스가 플레이어가 모든 모양을 보지 않고 너무 오래 가지 않도록하기 위해 사용하는 동일한 방법입니다.

+0

greenWall.color = randomColor()라고할까요? 원래 코드를 유지합니까? –

+0

위의 코드는 여러 색상의 모음을 사용합니다. 그러나 당신은 당신의 행동으로 색상을 쉽게 전환 할 수 있습니다. 달성하고자하는 것은 무언가가 무작위로 꺼내지면 같은 것을 다시 꺼낼 기회가 없다는 것입니다. –

관련 문제