我正在撕扯我的头发,试图弄清楚什么似乎是一个非常简单的问题。我知道很多这些东西都被切题地讨论过,所以如果这涉及到覆盖良好的地面,我深表歉意,但我找不到任何特定于我的解决方案的东西(相信我,我已经看过了)。
基本上我想沿着预定义的弯曲路径拖动对象/精灵(不仅仅是移动它,而是拖动它)。想想 iPhone 的“滑动解锁”功能,但不要只是从左到右拖动滑块,而是将路径设为弧线或波浪线。
我的基本想法是:
- 定义贝塞尔路径,将对象设置在起点。
- 如果对象被触摸,请在 touchesMoved(或一些类似函数)中检查贝塞尔路径上的命中检测。如果触摸停留在路径上,则沿着路径前进精灵直到路径结束(在这种情况下,任务完成)或用户的手指离开路径(在这种情况下,对象应该回到起点)。
这一切都不是微不足道的(至少,看起来是这样)。例如:
- 在 Bezier 路径上进行命中检测是一件非常痛苦的事情,因为您实际上需要在描边部分而不是填充部分上进行检测。即便如此,我似乎也无法在任何宽度的路径上找到一种方法——只能在贝塞尔曲线的 1 点宽路径上。
- 沿着路径部分移动对象似乎是不可能的:所有动画方法都沿着整个路径移动精灵。此外,这样做需要您找到最接近用户触摸的路径上的点,如果您曾经查找过,这涉及到极其复杂的数学运算。
- 我想过使用刚体来占据除了路径之外的所有空间,所以物体只能在路径中移动。然而,这需要定义弯曲刚体,其中一些必须是凹的。死路。
我做这太难了吗?好像没那么复杂。我不需要一个完整的解决方案,只需要一种新的方式来思考这个问题并朝着正确的方向前进。任何帮助将非常感激。