2017-01-24 9 views
2

이 게시물의 지침에 따라 여기; Swift-Making an SKNode simply "move forward" on an angle 나는 무작위 각도를 가지고 내 스프라이트가 그 각도에서 떨어져 이동하도록,이 코드를 작성했습니다 : 내 게임을 실행할 때Swift-SKSpriteNode 속도가 변경되지 않습니다.

func setDegrees() { 
    let ball1Degrees:UInt32 = arc4random_uniform(360) 
    if ball1Degrees > 300 { 
     ball2Degrees = Int(ball1Degrees) - 360 
     ball3Degrees = Int(ball1Degrees) - 300 
    } 
    else if ball1Degrees > 240 { 
     ball2Degrees = Int(ball1Degrees) + 60 
     ball3Degrees = Int(ball1Degrees) - 360 
    } 
    else { 
     ball2Degrees = Int(ball1Degrees) + 60 
     ball3Degrees = Int(ball1Degrees) + 120 
    } 
} 

func myFunction() { 
    ball1.position = CGPoint(x: 0, y: 0) 
    ball2.position = CGPoint(x: 0, y: 0) 
    ball3.position = CGPoint(x: 0, y: 0) 
    setDegrees() 
    if ball1Degrees < 90 { 
     ball1.physicsBody?.velocity = CGVector(dx: 1, dy: tan(Double(ball1Degrees) * (.pi/180))) 
    } 
    if ball1Degrees == 90 { 
     ball1.physicsBody?.velocity = CGVector(dx: 1, dy: 0) 
    } 
    if ball1Degrees > 90 && ball1Degrees <= 180 { 
     ball1.physicsBody?.velocity = CGVector(dx: -1, dy: tan(Double(180 - ball1Degrees) * (.pi/180))) 
    } 
    if ball1Degrees > 180 && ball1Degrees <= 270 { 
     ball1.physicsBody?.velocity = CGVector(dx: -1, dy: -tan(Double(ball1Degrees - 180) * (.pi/180))) 
    } 
    if ball1Degrees > 270 && ball1Degrees <= 0 { 
     ball1.physicsBody?.velocity = CGVector(dx: 1, dy: -tan(Double(360 - ball1Degrees) * (.pi/180))) 
    } 
    if ball2Degrees < 90 { 
     ball2.physicsBody?.velocity = CGVector(dx: 1, dy: tan(Double(ball2Degrees) * (.pi/180))) 
    } 
    if ball2Degrees == 90 { 
     ball2.physicsBody?.velocity = CGVector(dx: 1, dy: 0) 
    } 
    if ball2Degrees > 90 && ball2Degrees <= 180 { 
     ball2.physicsBody?.velocity = CGVector(dx: -1, dy: tan(Double(180 - ball2Degrees) * (.pi/180))) 
    } 
    if ball2Degrees > 180 && ball2Degrees <= 270 { 
     ball2.physicsBody?.velocity = CGVector(dx: -1, dy: -tan(Double(ball2Degrees - 180) * (.pi/180))) 
    } 
    if ball2Degrees > 270 && ball2Degrees <= 0 { 
     ball2.physicsBody?.velocity = CGVector(dx: 1, dy: -tan(Double(360 - ball2Degrees) * (.pi/180))) 
    } 
    if ball3Degrees < 90 { 
     ball3.physicsBody?.velocity = CGVector(dx: 1, dy: tan(Double(ball3Degrees) * (.pi/180))) 
    } 
    if ball3Degrees == 90 { 
     ball3.physicsBody?.velocity = CGVector(dx: 1, dy: 0) 
    } 
    if ball3Degrees > 90 && ball3Degrees <= 180 { 
     ball3.physicsBody?.velocity = CGVector(dx: -1, dy: tan(Double(180 - ball3Degrees) * (.pi/180))) 
    } 
    if ball3Degrees > 180 && ball3Degrees <= 270 { 
     ball3.physicsBody?.velocity = CGVector(dx: -1, dy: -tan(Double(ball3Degrees - 180) * (.pi/180))) 
    } 
    if ball3Degrees > 270 && ball3Degrees <= 0 { 
     ball3.physicsBody?.velocity = CGVector(dx: 1, dy: -tan(Double(360 - ball3Degrees) * (.pi/180))) 
    } 

} 

myFunction() 

하지만, 위의 속도 변화 중 어느 것도 적용되는 것으로 나타 없습니다. 화면 중앙으로의 재배치가 성공적으로 수행되고 특히 여기서는 관련이없는 몇 가지 스케일링 SKAction 명령이있어 잘 작동합니다. 왜 속도가 변하지 않습니까? 컴퓨터의 시뮬레이터가 처리 할 코드가 너무 많습니까? 아니면 어딘가에서 실수를 했나요? 나는 어떤 피드백에 대해서도 감사 할 것입니다.

미리 감사드립니다.

+0

당신이 심령을 작성하는 것을 잊지 않았다 시체? 'physicsBody!'로 변경하십시오. 충돌이 있는지 확인하십시오. 만약 그렇다면, 당신은 물리학 단체를 만드는 것을 잊었다는 뜻입니다. – Sweeper

+0

내 GameScene.sks의 각 스프라이트 속성 관리자에서 경계 원 유형 물리학 자 본을 지정했지만 아무 일도 일어나지 않습니다. 내 GameScene.swift에서 게임을 만들려면 뭔가를 추가해야합니까? 또는 Attributes inspector에서 설정을 이동하도록 허용 할 수 있도록 설정해야합니까? –

+0

나는 또한 당신의 제안을 시도했다. 그리고 아니오, 그것은 충돌하지 않는다? 다른 아이디어? –

답변

0

잘못 수행 한 몇 가지 사항이 있습니다. 그러나 그들은 정말로 쉽게 고칠 수 있습니다. 모든

먼저, 내 다른 대답에, 나는 DX의 비율 언급 : DY 아닌 값 DX와 DY의. 현재 노드의 속도가 느리기 때문에 차이점을 볼 수 없습니다. 문이 실행되지 않습니다 경우에도

ball1.physicsBody?.velocity = CGVector(dx: 100, dy: -tan(Double(360 - ball1Degrees) * (.pi/180)) * 100) 

를,이 : 100 DX와 DY를 곱

if ball1Degrees > 270 && ball1Degrees <= 0 { 

을 나는 당신이 시도해야한다고 생각 :

if ball1Degrees > 270 && ball1Degrees <= 360 { 
+0

아, 알겠습니다. 나는 <= 0 것을 변경하고, dx와 dy를 각각 50으로 곱했습니다. 그러나 이제 함수가 실행될 때마다 스프라이트가 사라집니다. 적어도 그들은 센터로 이사하기 전에 지시에 따라 규모를 조정했습니다. 이제 그들은 전혀 움직이지 않고, 중심이 아니라 스케일링이되고, 단지 아무것도 움직이지 않습니다. 나는 이것이 내 컴퓨터의 시뮬레이터가이 모든 것을 다루지는 않을 것이라고 생각하지만 여전히 이상하다 ... –