2014-12-22 2 views
2

간단한 장애물 점프 응용 프로그램을 작성하려고합니다. 장애물 이미지가 일련의 이미지에서 무작위로 선택되기를 바랍니다. arc4random_uniform 함수와 스위치 케이스의 조합을 사용하여 시도했지만 SKSpriteNode를 업데이트하지 않는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?SKSpriteNode에 대한 임의의 이미지 선택

class PlayScene: SKScene, SKPhysicsContactDelegate{ 
     ... 
     var block3 = SKSpriteNode(imageNamed: "lion") 
     .... 
} 


override func update(currentTime: NSTimeInterval) { 
    ..... 
    blockRunner() 
    } 


func blockRunner() { 

     var imageNamedAnimal = "" 
     var randomIndex = arc4random_uniform(2) 
     switch(randomIndex) { 
     case 0 : imageNamedAnimal = "turtle" 
     case 1: imageNamedAnimal = "lion" 
     default: imageNamedAnimal = "turtle" 
     } 

     block3 = SKSpriteNode(imageNamed: imageNamedAnimal) 
     ..... 
     } 

어떤 시점에서 임의의 이미지를 설정해야합니까? Block3은 imageNamedAnimal이 각 프레임에 임의의 값을 표시 함에도 불구하고 코드 시작 부분에 보낸 사자 이미지를 항상 선택하는 것으로 보입니다.

+0

여러 장애물을 만들거나 시간이 지남에 따라 변하는가? – 0x141E

+0

장애물이 하나 있는데 시간이 지남에 따라 임의로 이미지를 변경하고 싶습니다. – newbiedev

답변

0

당신은 한 이미지가 생성 및 텍스처로 이미지를 저장하여 문자를 변경할 때마다로드 피할 수 있습니다.

는 다음을 추가,

var textures = [SKTexture]() 

didMoveToView에서 텍스처를 저장하는 배열을 생성 생성하고 blockRunner 방법에서 텍스처를

textures.append(SKTexture(imageNamed: "turtle")) 
textures.append(SKTexture(imageNamed: "lion")) 
textures.append(SKTexture(imageNamed: "rhino")) 
... 

를 저장 : 여기 수행하는 방법의 예는 것을의

// Randomly select a character 
let rand = Int(arc4random_uniform(UInt32(textures.count))) 
let texture = textures[rand] as SKTexture 

block3.texture = texture 
// Optionally, resize the sprite 
block3.size = texture.size() 
+0

감사! 매번 이미지를로드하는 대신 분명히 구현됩니다. 처리 능력을 절약 할 수 있습니까? – newbiedev

+0

'imageNamed'로 이미지를로드 할 때 임의의 시간에 약간의 지연이 발생할 수 있습니다. – 0x141E

0

이니셜 라이저를 호출 할 때 새 SKSpriteNode를 만들지 만보기에는 절대 추가하지 않습니다. 대신, 다음과 같이 그 질감을 설정하여 스프라이트의 이미지를 변경할 수 있습니다

block3.texture = SKTexture(imageNamed: imageNamedAnimal) 
+0

감사합니다! 이게 그랬어 :-) – newbiedev

+0

@newbiedev이 방법으로 문제가 해결되면 정답으로 표시해야합니다. – ahruss

+0

그걸 몰랐어. 감사! – newbiedev