2017-04-09 4 views
1

좋아, 이것은 어렵지 않아서 실망 스럽다. 사용자가 손가락을 내릴 때마다 스프라이트 노드가 한 방향으로 영원히 움직이게해야합니다. 여기에 내가 직접 힘을 적용하고 접촉이 종료 할 때 제거되는 반복 skaction을 가진, 그러나 SKaction.moveBy를 사용하여 시도, 터치에서 그런칸트가 스프라이트 노드를 영원히 한 방향으로 이동시키지 않습니까?

character.size = CGSize(width: 58, height: 139) 
     character.color = UIColor.red 
     character.position = CGPoint(x: (scene?.size.width)!/2, y: (scene?.size.height)!/2) 
     character.zPosition = 3 
     character.physicsBody = SKPhysicsBody(rectangleOf: character.size) 
     character.physicsBody?.isDynamic = true 
     character.physicsBody?.affectedByGravity = false 
     character.physicsBody?.allowsRotation = false 

이 시작된 내 스프라이트 노드 생성, 노드는 (10)를 이동 다시 스냅

override public func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     print("touch!") 
     isTouching = true 
     let touch = touches.first! 
//   
     let movement = CGVector(
      dx: 10, 
      dy: 1 
     ) 
     let move = SKAction.moveBy(x: character.position.x+10, y: 0, duration: 1) 
     //let move = SKAction.applyForce(movement, duration: 0.5) 
     character.run(SKAction.repeatForever(move), withKey: "moving") 

나는 character.position.x를 사용하므로 왜 영원히 오른쪽으로 이동하지 않는지 알 수 없습니다. 노드를 방향으로 계속 움직이게하려면 어떻게해야합니까?

+0

http://stackoverflow.com/q/41220072/1430420과 비슷합니까? –

답변

2

경우에 따라 노드 시작점에서 끝점으로 노드가 이동합니다. 이를 반복하면 노드가 시작 지점에있는 노드로 이동하고 다시 최종 위치로 이동합니다. 결론 - SKAction은 적합하지 않습니다.

당신은 몇 가지 옵션이 있습니다

1) 수동으로 스프라이트의 위치 속성에 영향을 미치는를 - 예. update : 메소드 내부에서 시간이 지남에 따라 position.x/position.y 속성이 증가/감소합니다.

sprite.position.y += 1 

2) 당신은 업데이 트의 내부에 모든 프레임에 힘을 적용됩니다 방법을 직접 물리 몸의 속도 벡터에 영향을 미치는

sprite.physicsBody.applyForce(CGVector(dx:dxValue, dy:dyValue) 

3) :

sprite.physicsBody.velocity = CGVector(dx:dxValue, dy:dyValue) 

아마 당신이 갈 수 노드에 충동을가하면서,하지만 당신의 상황에 더 적합한 것은 각 프레임을 적용하는 것이라고 생각합니다.

희망이 있으시면 도움이됩니다.