【发布时间】:2013-10-13 18:00:46
【问题描述】:
我已经在 Cocos2d + Box2d for iOS 中实现了拖放功能。我需要将它移植到 Sprite Kit。逻辑非常基本:
- 当用户触摸屏幕时,找到手指下的精灵
- 在找到的精灵和场景的物理主体之间创建鼠标关节,将关节的目标设置为触摸位置
- 当触摸移动时,将关节的目标更新到新位置
- 触摸结束时,移除关节
一切运行良好。我喜欢触摸结束时模拟物理的方式 - 拖动的形状的速度取决于拖动速度和方向,所以当我在移动精灵时将手指从屏幕上移开时,它将继续沿相同方向移动,但现在受重力和阻尼。
很遗憾,我无法使用 Sprite Kit 重现相同的效果。没有像鼠标关节这样的关节,但我尝试过使用其他关节类型。我几乎成功地使用了 SKPhysicsJointFixed - 我正在创建新的精灵和它与拖动精灵之间的关节,当触摸移动时我正在移动新创建的精灵。不幸的是,它不像 Cocos2d + Box2d 中的鼠标关节那样工作——在拖动精灵时,它的速度总是为零。因此,每次我将手指从屏幕上移开时,拖动的精灵都会立即停止并开始受到重力影响而下落。无论我在拖动时移动手指的速度有多快,在释放拖动的形状后,它的行为方式完全相同。
我的问题是如何在 Sprite Kit 中实现鼠标关节,或者如何实现如上所述的拖放功能?
更新: 这是一个 box2d 鼠标关节示例,可以让您更清楚地了解我尝试使用 Sprite Kit 实现的内容: http://blog.allanbishop.com/wp-content/uploads/2010/09/Box2DJointTutorial1.swf
【问题讨论】:
-
Box2D 是开源的,鼠标关节只有几百行代码。这是有点神秘的代码,但在你的应用中实现它是你可以考虑获得你正在寻找的确切行为的一种可能性。
-
@iforce2d 好主意,我什至查看了 Box2d 代码,希望能够了解鼠标关节如何在引擎盖下工作,并为 Sprite Kit 编写自己的实现,但是它似乎比我复杂得多。基于Box2d开源代码我无法实现鼠标关节,所以在这里寻求帮助:-)
标签: ios drag-and-drop box2d sprite-kit