gpt4 book ai didi

ios - 以预设速度向滑动方向移动 SpriteNode

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

所以基本上我有 coin 对象,我想在屏幕上启动它。我有以下代码在滑动时运行一些计算,但不确定什么与我当前的情况相关:

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 对象?

非常感谢任何帮助!接下来的几个小时我都在线,所以请询问更多信息,我会很快回复你。

最佳答案

这取决于您是否希望硬币之后与其他物理体相互作用。你已经在问题上附加了几个“物理”标签,所以我假设你想要那个:)

我确实会选择基于数学的方法。所以基本上你只是从滑动中得到一个方向。速度本身取决于影响硬币的重力。

您可以在垂直和水平分量中分离速度矢量。要覆盖的垂直距离是 let verticalDistance = targetHeight - coin.position.y。硬币在最高点的垂直速度必须为零,我们知道在动画期间它以恒定的 -9.81 pt/s*s 减速(超出我的头脑)。

所以速度图看起来像这样:

enter image description here

使用公式 f(x) = -9.81 * x + v 其中 v 是我们要求解的垂直起始速度。代数告诉我们 f(x) 与 x 轴相交,x 值为 v/9.81。直到 f(x) 与 x 轴相交的点为止的总距离等于 f(x) 下三角形的表面积。这个三角形的表面是 1/2 * v/9.81 * v(即 1/2 * width * height)。由于您知道该距离应该是多少(上一段中的verticalDistance),代数决定了v = sqrt(2 * 9.81 * d)。现在你知道你的起始垂直速度是基于硬币必须移动的高度!

由于您知道硬币的角度(由用户的滑动决定)和垂直速度,您可以计算水平速度。我把它留给你 ;) 请注意,我们当然忽略了可能影响硬币速度的阻力/摩擦。我的代数也可能生锈了。

作为旁注
我会将 let touch = touches.first 替换为

guard let touch = touches.first else {
return
}

这样一来,touch 就是一个非可选的。

关于ios - 以预设速度向滑动方向移动 SpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38772930/

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