2017-09-16 17 views
0

에서 "이미 부모가있는 SKNode을 추가 Attemped"나는 내가 꽃을 생성하기 위해 사용하고이 함수는 임의의 위치에서 매 초마다 객체가 있습니다는 스위프트

func spawnFlower() { 
    //Create flower with random position 
    let tempFlower = Flower() 
    let height = UInt32(self.size.height/2) 
    let width = UInt32(self.size.width/2) 
    let randomPosition = CGPoint(x: Int(arc4random_uniform(width)), y: Int(arc4random_uniform(height))) 
    tempFlower.position = randomPosition 

    var tooClose = false 
    flowerArray.append(tempFlower) 

    // enumerate flowerArray 
    for flower in flowerArray { 

     // get the difference in position between the current node 
     // and each node in the array 
     let xPos = abs(flower.position.x - tempFlower.position.x) 
     let yPos = abs(flower.position.y - tempFlower.position.y) 

     // check if the spawn position is less than 10 for the x or y in relation 
     // to the current node in the array 
     if (xPos < 10) || (yPos < 10) { 
      tooClose = true 
     } 

     if tooClose == false { 
      //Spawn node 
      addChild(tempFlower) 
     } 
    } 
} 

나는 꽃에 대한 새로운 인스턴스를 생성하고 모든 시간은 함수가 호출,하지만 난 아래와 같이 함수를 호출 어떤 이유로, 그것은 나에게 오류를 제공한다 :

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attemped to add a SKNode which already has a parent: 

spawnFlower() 함수는 매 초마다 호출된다. 처음 호출 될 때 작동하고 두 번째로 충돌합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

addChild() 호출은 for 루프 외부로 이동해야하므로 tempFlower이 부모에만 한 번만 추가됩니다.

func spawnFlower() { 
    //Create flower with random position 
    let tempFlower = Flower() 
    let height = UInt32(self.size.height/2) 
    let width = UInt32(self.size.width/2) 
    let randomPosition = CGPoint(x: Int(arc4random_uniform(width)), y: Int(arc4random_uniform(height))) 
    tempFlower.position = randomPosition 

    var tooClose = false 
    flowerArray.append(tempFlower) 

    // enumerate flowerArray 
    for flower in flowerArray { 

     // get the difference in position between the current node 
     // and each node in the array 
     let xPos = abs(flower.position.x - tempFlower.position.x) 
     let yPos = abs(flower.position.y - tempFlower.position.y) 

     // check if the spawn position is less than 10 for the x or y in relation 
     // to the current node in the array 
     if (xPos < 10) || (yPos < 10) { 
      tooClose = true 
     } 
    } 

    if tooClose == false { 
     // Spawn node 
     addChild(tempFlower) 
    } 
} 
+0

감사합니다. tooClose가 매번 true로 설정 되었기 때문에 if 문 안에 flowerArray.append (tempFlower) 행을 추가해야했습니다. – 5AMWE5T