gpt4 book ai didi

ios - SpriteKit : calculate angle of joystick and change sprite based on that

转载 作者:行者123 更新时间:2023-11-28 06:09:27 25 4
gpt4 key购买 nike

我正在使用 SpriteKit 制作 RPG 鸟瞰风格游戏。我制作了一个操纵杆,因为方向键无法让玩家充分控制他的角色。

我无法全神贯注地思考如何计算根据操纵杆拇指节点的角度更改角色 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")
}

}

我现在设置的方式基于拇指节点在下面四个标记部分内的位置,以交叉方法测试操纵杆位置的正或负状态

image 1

我不希望它那样做

我如何设置它,以便它根据拇指节点实际指向我的操纵杆底座的位置来更改 Sprite ,就像这样。

image 2

我已经为此苦苦挣扎了 3 天,所以我们将不胜感激。

最佳答案

这看起来太复杂了。只需比较 x 和 y 分量差分向量 v。像这样:

if v.dx > abs(v.dy) {
// right
} else if v.dx < -abs(v.dy) {
// left
} else if v.dy < 0 {
// up
} else if v.dy > 0 {
// down
}

关于ios - SpriteKit : calculate angle of joystick and change sprite based on that,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com