我有使用 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