SpriteKit으로 RPG Birds-eye 스타일 게임을 만들고 있습니다. D-Pad가 플레이어에게 캐릭터를 충분히 제어하지 못하기 때문에 조이스틱을 만들었습니다.SpriteKit : 조이스틱의 각도를 계산하고이를 기반으로 스프라이트를 변경하십시오.
조이스틱 엄지 노드의 각도에 따라 내 캐릭터의 Sprite를 변경하는 데 필요한 데이터를 계산하는 방법에 대해 두뇌를 감쌀 수 없습니다. 여기
은 내가override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
if isTracking == false && base.contains(location) {
isTracking = true
}
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location: CGPoint = touch.location(in: self)
if isTracking == true {
let v = CGVector(dx: location.x - base.position.x, dy: location.y - DPad.position.y)
let angle = atan2(v.dy, v.dx)
let deg = angle * CGFloat(180/Double.pi)
let Length:CGFloat = base.frame.size.height/2
let xDist: CGFloat = sin(angle - 1.57079633) * Length
let yDist: CGFloat = cos(angle - 1.57079633) * Length
print(xDist,yDist)
xJoystickDelta = location.x * base.position.x/CGFloat(Double.pi)
yJoystickDelta = location.y * base.position.y/CGFloat(Double.pi)
if base.contains(location) {
thumbNode.position = location
} else {
thumbNode.position = CGPoint(x: base.position.x - xDist, y: base.position.y + yDist)
}
}
}
}
업데이트 방법
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
if xJoystickDelta > 0 && yJoystickDelta < 0 {
print("forward")
}
}
내가 지금 설정 십자가에 조이스틱 위치의 양 또는 음의 상태를 테스트 한 방법을 사용하고 내 코드입니다 엄지 노드가 아래 표시된 4 개의 섹션 중 어디에 위치하는지에 기초한 방법
는 내가하고 싶은 해달라고
어떻게는 엄지 손가락 노드가 실제로 그렇게처럼 내 조이스틱 기지 내부 가리키는 위치에 따라 스프라이트를 변경하도록 내가 그것을 설정합니다. 내가 지금 3 일이 고민 한
그래서 어떤 도움을 주시면 감사하겠습니다.
정말 고마워요! 당신은 생명을 구하는 사람입니다. 저는 지금 이것을 며칠 동안 해왔습니다. 추신 아래로 위로 전환해야합니다 –
@ E.Huckabee : 좌표계에 따라 다릅니다. UIKit에서 원점은 왼쪽 위 모서리에 있습니다. 그래서 나는 긍정적 인 Δy를 "아래로"간주했습니다. SpriteKit에서 다른 방법입니다. –
나는 그것이 매우 간단하다는 것을 깨닫지 못했다. 당신의 빠른 anwser에 감사한다. –