2017-10-17 29 views
1

행성 주위에 우주선 궤도를 만들려고합니다. 나는 move 조치를 실행하려고 할 때, 그러나, screenshotXcode Swift SKAction. 팔로우 시작 지점

을 나는 현재

let playerPos = player.position 
let planetPos = planet.position 

let radius = playerPos.x - planetPos.x 

let rect = CGRect(x: planetPos.x - radius, y: planetPos.y - radius, width: 2 * radius, height: 2 * radius) 

let bezPath = UIBezierPath(roundedRect: rect, cornerRadius: 0) 
let path = bezPath.cgPath 

let shape = SKShapeNode(path: path) 
shape.strokeColor = .blue 
shape.zPosition = 10 
self.addChild(shape) 

let move = SKAction.follow(path, asOffset: false, orientToPath: true, speed: 200) 

을하고있는 중이 야이 올바른 경로를 생성하지, 플레이어가 직접 행성 아래 텔레포트 한 후 경로를 따라 시작합니다. 플레이어가 현재있는 경로를 따라 시작하도록 할 수있는 방법이 있습니까? 나는 우주선을 그가 원위치에서 시작하고 지구를 도는 한 원형으로 움직이게 만드는 방법을 완전히 바꿔 가고 있습니다.

답변

0

정확하게 이해하면 플레이어가 현재 위치에서 경로의 일부 위치로 이동 한 다음 해당 경로를 따라 가길 원합니다.

예를 들어, 플레이어를 현재 위치에서 경로의 시작점으로 이동하려면 다른 동작을 실행하는 것이 좋습니다. CGPoint(x: planetPos.x - radius, y: planetPos.y - radius). 그런 다음 플레이어가 그 지점에 오면 정의한 동작 인 move을 실행하십시오. SKAction.sequence을 사용하여 액션을 차례대로 실행할 수 있습니다.

희망이 도움이됩니다.

+0

불행히도, 이것은 내가 찾고있는 목표를 달성하지 못했습니다. 그것은 다른 경우에도 효과가 있었을 지 모르겠지만, 제 경우에는 물체가 물리학 체를 가지고 있었고 그런 것을 시도한다면 충돌했을 것입니다. (나는 그들을 충돌시키고 싶지만,이 경우는 안된다.) –

0

이 솔루션은 대신

let dx = playerPos.x - planetPos.x 
let dy = playerPos.y - planetPos.y 
let currentTheta = atan(dy/dx) 
let endTheta = currentTheta + CGFloat(Double.pi * 2) 

let newPath = CGMutablePath.init() 
newPath.move(to: player.position) 
newPath.addArc(center: planetPos, radius: radius, startAngle: currentTheta, endAngle: endTheta, clockwise: false) 

let move = SKAction.follow(newPath, asOffset: false, orientToPath: true, speed: 200) 
player.run(SKAction.repeatForever(move)) 

newPath.move(to: player.position) 라인은 선박의 위치 경로를 시작하고 newPath.addArc 라인은 플레이어의 위치에서 원을 그리고 행성 주위를 360도 회전이 종료하지 CGMutablePath를 사용하는 것이 었습니다 플레이어의 위치에서 위로 올라간다.

+0

그냥 let '= CGRect (x : 반지름, y : 반지름, 너비 : 2 * 반지름, 높이 : 2 * 반지름)'let bezPath = UIBezierPath (roundedRect : rect, cornerRadius : 0)' – Knight0fDragon