2016-02-12 32 views
0

我有一個球,我有不同的顏色。球有兩個紋理(紋理1和紋理2),我跑他們做一個動畫。我有不同的綵球。一旦我調用一個隨機函數來調用任意一個隨機球(紋理1),我的其他函數就不會與相同的球色(紋理2)匹配。例如,如果我的texture1調用redBallUp,則我的其他函數與redballDown不匹配,但會隨機調用紋理。有時候,它會匹配它,但動畫會在不同紋理之間切換,有時它根本不會調用texture2。如何將隨機紋理與動畫的其他紋理進行匹配?

以下是我設置它:

class GameScene: SKScene { 

override func didMoveToView(view: SKView) { 
    let ballTexture1 = SKTexture(imageNamed: getRandomBallUp()) 
    ballTexture1.filteringMode = SKTextureFilteringMode.Nearest 
    let ballTexture2 = SKTexture(imageNamed: getRandomBalldDown()) 
    ballTexture2.filteringMode = SKTextureFilteringMode.Nearest 

    let anim = SKAction.animateWithTextures([ballTexture1, ballTexture2], timePerFrame: 0.15) 
    let upDown = SKAction.repeatActionForever(anim) 

    ball = SKSpriteNode(texture: ballTexture1) 
    ball.position = CGPoint(x: self.frame.size.width/2.8, y:CGRectGetMidY(self.frame)) 
    ball.runAction(upDown) 

    self.addChild(ball) 
    } 

func getRandomBallUp() -> String{ 
    let randomval = arc4random_uniform(6) 
    var ballUp = "" 
    switch(randomval) 
    { 
    case 0: 
     ballUp = "BlueBallUp" 
    case 1: 
     ballUp = "DarkBlueBallUp" 
    case 2: 
     ballUp = "GreenBallUp" 
    case 3: 
     ballUp = "PurpleBallUp" 
    case 4: 
     ballUp = "RedBallUp" 
    case 5: 
     ballUp = "YellowBallUp" 
    default:() 
    } 
    return ballUp 
} 

func getRandomBallDown() -> String{ 
    var ballDown = "" 
    if (getRandomBallUp() == "BlueBallUp") { 
     ballDown = "BlueBallDown" 
    } 
    if (getRandomBallUp() == "DarkBlueBallUp") { 
     ballDown = "DarkBlueBallDown" 
    } 
    if (getRandomBallUp() == "GreenBallUp") { 
     ballDown = "GreenBallDown" 
    } 
    if (getRandomBallUp() == "PurpleBallUp") { 
     ballDown = "PurpleBallDown" 
    } 
    if (getRandomBallUp() == "RedBallUp") { 
     ballDown = "RedBallDown" 
    } 
    else if (getRandomBallUp() == "YellowBallUp") { 
     ballDown = "YellowBallDown" 
    } 
    return ballDown 
} 

回答

1

每次調用getRandomBallUp()要生成一個隨機值,並返回基於該值的字符串。爲了避免這種情況,uou需要你getRandomBallDown()更改爲類似:

func getCorrespondingRandomBallDown(ballUp:String) -> String{ 
    var ballDown = "" 
    if (ballUp == "BlueBallUp") { 
     ballDown = "BlueBallDown" 
    } 
    if (ballUp == "DarkBlueBallUp") { 
     ballDown = "DarkBlueBallDown" 
    } 
    if (getRandomBallUp() == "GreenBallUp") { 
     ballDown = "GreenBallDown" 
    } 
    if (ballUp == "PurpleBallUp") { 
     ballDown = "PurpleBallDown" 
    } 
    if (ballUp == "RedBallUp") { 
     ballDown = "RedBallDown" 
    } 
    else if (ballUp == "YellowBallUp") { 
     ballDown = "YellowBallDown" 
    } 
    return ballDown 
} 

您還需要改變你的didMoveToView:

override func didMoveToView(view: SKView) { 
    let ballUp = getRandomBallUp() 
    let ballTexture1 = SKTexture(imageNamed: ballUp) 
    ballTexture1.filteringMode = SKTextureFilteringMode.Nearest 
    let ballTexture2 = SKTexture(imageNamed: getCorrespondingRandomBallDown(ballUp) 
    ballTexture2.filteringMode = SKTextureFilteringMode.Nearest 

    let anim = SKAction.animateWithTextures([ballTexture1, ballTexture2], timePerFrame: 0.15) 
    let upDown = SKAction.repeatActionForever(anim) 

    ball = SKSpriteNode(texture: ballTexture1) 
    ball.position = CGPoint(x: self.frame.size.width/2.8, y:CGRectGetMidY(self.frame)) 
    ball.runAction(upDown) 

    self.addChild(ball) 
    } 
+0

明白了。非常感謝。這說得通。 – Sharukh

1

beyowulf有答案,但是這是迅速的嬰兒,讓使用一些其特點:

func getRandomBall() -> (up:String,down:String){ 
    let randomval = arc4random_uniform(6) 
    var ball = "" 
    switch(randomval) 
    { 
    case 0: 
     ball = "BlueBall" 
    case 1: 
     ball = "DarkBlueBall" 
    case 2: 
     ball = "GreenBall" 
    case 3: 
     ball = "PurpleBall" 
    case 4: 
     ball = "RedBall" 
    case 5: 
     ball = "YellowBall" 
    default:() 
    } 
    return (up:"\(ball)Up",down:"\(ball)Down") 
} 

override func didMoveToView(view: SKView) { 
    let ballTextureName = getRandomBall() 
    let ballTexture1 = SKTexture(imageNamed: ballTextureName.up) 
    ballTexture1.filteringMode = SKTextureFilteringMode.Nearest 
    let ballTexture2 = SKTexture(imageNamed: ballTextureName.down) 
    ballTexture2.filteringMode = SKTextureFilteringMode.Nearest 

    let anim = SKAction.animateWithTextures([ballTexture1, ballTexture2], timePerFrame: 0.15) 
    let upDown = SKAction.repeatActionForever(anim) 

    ball = SKSpriteNode(texture: ballTexture1) 
    ball.position = CGPoint(x: self.frame.size.width/2.8, y:CGRectGetMidY(self.frame)) 
    ball.runAction(upDown) 

    self.addChild(ball) 
}