我正在制作一个简单的游戏,用户向上滑动一个对象(SKSpriteNode)以拱形运动上下发送它(使用我假设的SKAction)。这是我希望完成的视觉效果(请原谅我的基本Pixelmator技能):
我已经创建了一个SKAction,它向上发送对象并根据速度等计算滑动的最终点。但是,我无法弄清楚如何在达到最后一点时使拱形运动发生也不会回落到屏幕的底部。我希望我可以为对象添加重力,Sprite Kit将处理对象的移动,但从我最初的发现来看似乎并非如此。
我在这里发布了我当前的代码:
https://github.com/mikeberlin/Swipe-Arch-PoC
该应用程序基于本教程:
http://www.raywenderlich.com/44270/sprite-kit-tutorial-how-to-drag-and-drop-sprites
代码用Xamarin / C#编写,但几乎与Objective-C等效。如果您需要/希望我将其转换为Objective-C,我当然可以。
先谢谢大家的帮助,如果我能提供更多信息,请告诉我。
答案 0 :(得分:5)
现在听起来就像是僵局,你可以在游戏中使用物理引擎。如果您使用物理引擎,游戏中的移动看起来会更加自然。使用它的缺点是需要更多的工作来实现,Sprite Kit物理引擎有时可能是粗略的。以下是两个选项的大致轮廓:
如果您想坚持使用SKAction并且不使用物理引擎,则可以创建UIBezierPath
并使用[SKAction followPath:[curveName CGPath]
来移动精灵。 Bezier曲线看起来令人生畏,但是一旦你掌握了它,它们就会非常简单易用。如果您打算沿着这条路走下去,我建议您首先查看Wikipedia article.
如果你选择使用它,你将无法为对象添加重力(尽管如果你操纵动作的timingMode
属性,你可能会笨拙地模拟它。)为此,你必须使用物理引擎(以避免重新发明轮子。)如果你之前没有使用过Sprite Kit的物理引擎,Apple的Sprite Kit Programming Guide有一个简单的例子。
要使用物理引擎完成您想要的任务,您需要知道一点触发并至少完成以下步骤:
UISwipeGestureRecognizer
可以抓住滑动。touchesBegan
,touchesMoved
和touchesEnded
函数来计算必须应用的推力方向touchesMoved
和touchesEnded
之间的计时器来计算滑动的速度。applyForce
,可能使用applyTorque
来移动您的物理身体。开发游戏祝你好运!
答案 1 :(得分:1)
使用基于物理的方法结束。我浏览了iOS Sprite Kit编程指南,该指南有很多帮助(图)。
Per @ LearnCocos2D和@doctorBroctor我提出了似乎运行良好的解决方案。我更新了我的github项目,如果有人发现这篇文章并且正在寻找一些代码。
谢谢大家!
PS - 我不知道如何标记这个,因为我使用了两个回答/答案。所以我用解释创建了这个答案,然后对两个回复进行了投票。如果有一个更好,更公平的方式来标记这个问题,我会全力以赴。