【发布时间】:2014-07-16 17:48:29
【问题描述】:
我目前正在为 iOS 开发一款平台游戏,并决定使用 SpriteKit。
我已经使用过this platforming game tutorial,但我想使用内置的物理引擎而不是自己制作。我已经在网上搜索了好几天,但没有找到关于如何使用 SpriteKit 创建具有跳跃和移动的平台游戏的好教程,所以我决定在这里提问。我也尝试了许多不同的实现,但他们都“感觉”错了。要么是动作有问题,要么是跳跃有问题,或者最常见的是,两者都有。
那么让精灵在屏幕上移动和跳跃的最佳方式是什么?在经典的平台游戏风格中,我希望“相机”在沿 x 轴移动时跟随精灵。最好的方法是更改精灵的 x 值,然后立即将背景居中放在精灵上吗?还是只是移动背景?以及如何获得良好的动态运动?现在感觉很重,并且物理引擎在跳跃和同时向前/向后移动时会干扰运动。我该如何进行跳跃?我只想要单跳,有固定的跳跃高度。但是,当精灵第一次接触地面时,我希望能够执行第二次跳跃(即使它正在弹跳),并达到相同的高度。
我现在是这样的:屏幕分为三部分,最左边是后退,中间是跳跃,最右边是前进。点击任一侧时,我将 bool _movingForward/_movingBackward 设置为适当的值。在 update-loop 中,我通过将 dx 速度增加/减少 +/- 15 来更改 sprite 向前/向后速度。如果速度大于 maxVelocity,我将其设置为 最大速度。然后我通过
设置精灵速度_sprite.physicsBody.velocity = CGVectorMake(forwardVel, _sprite.physicsBody.velocity.dy);
如果 _movingForward 或 _movingBackward 都不为真,我降低/增加 速度到 0.0 到 +/- 4.0 到dx 速度,使其静止。但是,这感觉很沉重,我注意到物理引擎会自动带走一些速度,就好像有摩擦或其他东西一样。有没有更好的方法来做到这一点?最好只使用物理引擎。
跳跃也是如此。当点击屏幕的中间部分时,我将 bool _isJumping 设置为 YES。在 update-loop 中,如果 _isJumping 为 YES 并且 dy 速度为 0,我将脉冲应用到 sprite
CGVectorMake(0.0f, 200.0f);
这感觉很好,但问题是精灵需要完全静止才能执行第二次跳跃。我希望精灵一接触地面就能够执行第二次跳跃,即使它有点弹跳。但是,我不希望这导致精灵比上次跳得更高。
我知道我的问题非常广泛,但我的更新循环应该是什么样子的一些基本代码示例,以及关于我可以使用哪些内置方法和函数来实现此效果的一些提示将不胜感激!我对gamedev很陌生,所以如果这是非常基本的,我很抱歉。
提前致谢! :)
编辑 1:短版:
如何使用 SpriteKit 中的内置物理引擎根据用户输入进行精灵移动和跳跃。
【问题讨论】:
-
文字过多。请将您的帖子缩小到具有足够上下文(即代码)的特定问题,以了解您正在尝试做什么或什么不起作用。试着把注意力集中在一个阻碍你前进的子问题上。
标签: ios objective-c sprite-kit game-physics