2016-08-04 8 views
0

기본적으로 coin 개체가 있으며 화면 전체에서 실행하려고합니다. 나는 슬쩍에 대한 몇 가지 계산을 실행하는 다음과 같은 코드를 가지고 있지만 내 현재 상황에 적절한 것을 확실하다 :SpriteNode를 미리 설정된 속도로 스 와이프 방향으로 이동

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    touching = true 

    let touch = touches.first 
    let loc = touch?.locationInNode(self) 
    if coin.containsPoint(loc!){ 
     touchPoint = loc! 
     touchTime = (touch?.timestamp)! 
    } 
} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    touching = false 

    let touch = touches.first 
    let loc = touch?.locationInNode(self) 
    var xDiff = (loc?.x)! - touchPoint.x 
    var yDiff = (loc?.y)! - touchPoint.y 
    let distance = sqrt(xDiff * xDiff + yDiff * yDiff) 
} 

내가 동전은 본질적으로 슬쩍 방향으로 던져 싶은,하지만 난 그것을 원하지 중력으로 인해 아래로 떨어지기 전에 매번 화면의 특정 y 좌표에 도달해야합니다. 그래서 나는 어떻게 든 y- 포인트에 도달하도록 매번 완벽한 속도를 계산해야한다고 생각하고 coin 개체를 해당 속도로 스 와이프 방향으로 밀어 넣을까요?

많은 도움을 주셨습니다. 나는 앞으로 몇 시간 동안 온라인 상태이므로 더 많은 정보를 요구하면 나는 꽤 빨리 당신에게 돌아갈 수있을 것이다.

+0

당신이 묻는 것을 이해한다고 가정하면 실제로 게임 물리학에서 이처럼 상당히 일반적인 문제를 해결하기는 어렵습니다. 여기에 대한 품질 관리가 있습니다 https://math.stackexchange.com/q/166039/34973 – Fattie

+0

반대로이 간단한 질문을하는 것이 가능합니다 : https://stackoverflow.com/a/46919374/294884 – Fattie

답변

1

동전이 다른 물리 기관과 상호 작용하기를 원하는지에 따라 다릅니다. 질문에 여러 개의 "물리학"태그를 첨부 했으므로 다음과 같이 가정합니다.

저는 수학에 기반한 접근법을 실제로 찾아 볼 것입니다. 그래서 기본적으로 당신은 방금 스 와이프 방향을 얻고 있습니다. 속도 자체는 동전에 영향을 미치는 중력에 달려 있습니다.

수직 및 수평 구성 요소에서 속도 벡터를 분리 할 수 ​​있습니다. 표지까지의 수직 거리는 let verticalDistance = targetHeight - coin.position.y입니다. 동전은 가장 높은 지점에서 제로 수직 속도를 가져야하며, 애니메이션 중에는 -9.81pt/s * (내 머리 꼭대기에서 벗어남)로 감속한다는 것을 알고 있습니다.

그래서 속력 그래프는 다음과 같다 : v 우리가 해결되는 수직 기동 속도 화학식 f(x) = -9.81 * x + v

enter image description here

. 대수학은 f(x)이 x 값이 v/9.81 인 x 축과 교차한다고 말합니다. f(x)이 x 축과 교차하는 지점까지 덮힌 총 거리는 f (x) 아래의 삼각형의 표면적과 같습니다. 이 삼각형의 표면은 1/2 * v/9.81 * v (1/2 * 너비 * 높이)입니다. 이 거리가 무엇인지 알기 때문에 (이전 단락의 verticalDistance) 대수는 v = sqrt(2 * 9.81 * d)을 나타냅니다. 이제 동전의 높이를 기준으로 수직 속도를 시작하는 것을 알 수 있습니다!

동전의 각도 (사용자가 지정한 값)와 수직 속도를 알고 있기 때문에 수평 속도를 계산할 수 있습니다. 나는 그것을 당신에게 맡길 것입니다;) 물론 우리는 동전 속도에 영향을 줄 수있는 끌기/마찰을 무시하고 있습니다. 또한 내 대수학 녹슨 수 있습니다. 나는이 방법으로

guard let touch = touches.first else { 
    return 
} 

let touch = touches.first을 대체 할
보조 노트로

touch이 아닌 선택 사항입니다.