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