2017-11-05 3 views
0

중력과 반발 속성을 가진 볼을 포함하는 게임을 만듭니다 (모든 공은 임의의 기능으로 다른 속성을가집니다). 이제 각 공의 마지막 위치를 감지 한 다음 노드 기능에서 제거를 호출하려고합니다. 메신저가 화면에 점프하는 동안 볼의 위치를 ​​감지하는 업데이트 기능을 사용합니다. 내가 할 수 있는지, 어떻게하면 마지막 위치를 감지 할 수 있을지 모르겠다. 내 생각에 각 위치를 저장할 배열을 만들지 만 올바른 방법인지 궁금한 점이 있고 더 간단하고 좋은 방법이 있는지 궁금합니다. 여기 내 코드는 지금이다 :노드의 마지막 위치를 감지합니다.

override func update(_ currentTime: TimeInterval) { 

    self.enumerateChildNodes(withName: "BALL") { (node:SKNode, nil) in 
     print(node.position) 
    } 
} 

은 당신이 나를 도와 드릴까요? 배열 옵션은 유일한 방법이거나 또 다른 옵션과 더 나은 옵션이 있습니까?

답변

0

공을 서브 클래스로 분류하고 위치를 저장하는 고유 한 속성을 추가 할 수 있습니다.

업데이트에
class BallNode: SKShapeNode { 
    var lastPosition: CGPoint? 
} 

let ball = BallNode() 
ball.name = “BALL” 
ball.position = CGPoint.zero 
self.addChild(ball) 

는 ....

override func update(_ currentTime: TimeInterval) { 
    self.enumerateChildNodes(withName: "BALL") { (node:BallNode, nil) in 
     print(node.position) 
     if let last= node.lastPosition { 
      print(last) 
      // do something with last 
     } 
     //Update last position before end of updatE 
     node.lastPosition = node.position 

    } 
} 
+0

나는 공을 서브 클래스해야합니까? 지금은 createBall() -> SKNode 함수가 있습니다. 괜찮습니까? 아니면 서브 클래스를 통해 더 잘 수행해야합니까? – omerc

+0

하위 클래스를 만들지 않으면 여기에 제시된 방식대로 할 수 없습니다. – TheValyreanGroup

+0

하지만 그렇게하려고하는 동안 나는 혼란스러워한다. 내가 언급 한대로 클래스를 설정했지만 skshapenode로 설정하려고하면 "GameScence.BallNode"를 입력 할 때 'skshapenode'유형의 값을 할당 할 수 없다는 오류가 발생합니다. 나는 그것이 물리 속성을 가지고 있기 때문에 skshapenode를 타이핑하기 위해 공을 필요로합니다. – omerc

관련 문제