2014-11-24 8 views
0

기존 노드가있는 장면에 새 노드를 추가하는 데 문제가 있습니다. 추가 할 때 .position 속성을 동일하게 설정했지만 기존 노드의 위치가 아닌 장면의 원점에 나타납니다.SpriteKit 노드 위치 복제

저는 SpriteKit에서 아주 간단한 소행성과 같은 게임을 만들었습니다. 나는 소행성을 추가 내 GameScene의 방법이 있습니다

// MARK: - Asteroids 
func insertAsteroids(count: Int, size: AsteroidSize, newPosition: CGPoint?) { 
    for i in 0 ..< initialAsteroidCount { 
     let asteroid = Asteroid(size: size) 

     if let position = newPosition { 
      asteroid.position = position 
     } else { 
      asteroid.position = randomPositionOnScene() 
     } 
     self.addChild(asteroid) 
    } 
} 

을하고 그래서 그들은 임의의 장소에 가서 내 GameScene에서 나는 nil로 설정 newPositioninsertAsteroids(initialAsteroidCount, size: AsteroidSize.Big, newPosition: nil) 다음과 같이 호출. 내가 소행성을 촬영하면

나는 약간 다르게 같은 방법을 호출하는 접촉 핸들러를 가지고 있지만 :

func didBeginContact(contact: SKPhysicsContact) { 

    [...] 

    //make new asteroids 
    if let newSize = oldAsteroid.smallerAsteroidSize() { 
     let newAsteroidCount = Int(arc4random_uniform(2)) + 2 

     self.insertAsteroids(newAsteroidCount, size: newSize, newPosition: oldAsteroid.position) 
    } 

    [...] 

} 

결정적인 것은 oldAsteroid.position입니다. println() 위치를 insertAsteroids() 직후에 볼 수 있으며 동일하지만 표시 될 때 장면의 왼쪽 하단 (원점)에 나타납니다.

self.insertAsteroids(newAsteroidCount, size: newSize, newPosition: CGPoint(x: 40, y: 50)) 

내가 좌표 시스템과 실수를하거나 새로운 노드를 추가로 수행하는 방법이있다 유무 : 나는 그들이 여전히 원점에 표시 알려진 위치로 강제하더라도

SKPhysicsContactDelegate 메서드 내부의 장면?

답변

0

나는 answer을 발견했습니다.

Paweł BiałeckiDonn입니다. 트리를 시뮬레이트하는 동안 트리를 수정할 수 없습니다. 즉, didBeginContact() 메서드 내에서 트리를 수정할 수는 없지만 플래그를 설정하고 didSimulatePhysics()에서 트리를 수정할 수 있습니다.