2

我正在制作一个简单的游戏,用户在一个对象(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,我当然可以。

非常感谢大家的帮助,如果我可以提供任何进一步的信息,请告诉我。

4

2 回答 2

5

听起来现在你陷入了僵局,你可以在游戏中使用物理引擎,也可以不使用。如果您使用物理引擎,您的游戏中的运动看起来会更加自然。使用它的缺点是它需要更多的工作来实现,并且 Sprite Kit 物理引擎有时可能是粗略的。以下是您的两个选项的大致轮廓:

如果你想坚持使用 SKAction 而不是使用物理引擎,你可以创建一个UIBezierPath并使用[SKAction followPath:[curveName CGPath]来移动你的精灵。贝塞尔曲线看起来很吓人,但是一旦你掌握了它,它们就非常简单易用。如果您打算走这条路,我建议您首先查看Wikipedia 文章中的图片。

但是,如果您选择使用它,您将无法向对象添加重力(尽管如果您摆弄动作的timingMode属性,您可能会笨拙地模拟它。)为此,您必须使用物理引擎(避免重新发明轮子。)如果您以前没有使用过 Sprite Kit 的物理引擎,Apple 的Sprite Kit 编程指南有一个简单的示例。

要使用物理引擎完成您想要的,您需要了解一些三角函数并至少完成以下步骤:

  • 如果您不关心滑动的确切角度和速度,我们UISwipeGestureRecognizer来捕捉滑动。
  • 否则,请使用touchesBegantouchesMovedtouchesEnded函数来计算必须应用的推力方向
  • touchesMoved在和之间使用计时器touchesEnded来计算滑动的速度。
  • 使用applyForce并可能applyTorque移动你的物理身体。
  • 修补物理体的质量和形状,让它按照你想要的方式移动

祝您游戏开发顺利!

于 2013-11-14T20:49:13.120 回答
1

最终使用基于物理的方法。我浏览了 iOS Sprite Kit 编程指南,这对我有很大帮助(看图)。

https://developer.apple.com/LIBRARY/IOS/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Introduction/Introduction.html

根据@LearnCocos2D 和@doctorBroctor,我提出了似乎运行良好的解决方案。如果有人偶然发现这篇文章并正在寻找一些代码,我会更新我的 github 项目。

感谢大家!

PS - 我不知道如何标记它,因为我使用了两个响应/答案。所以我用解释创建了这个答案,并对这两个答案都投了赞成票。如果有更好,更公平的方式来标记这个问题,我会全力以赴。

于 2013-11-15T20:43:17.640 回答