如何让SKSpriteNode在颠簸的地形上顺畅地行走?

时间:2014-05-21 08:36:38

标签: sprite-kit

好奇我将如何让SKSpriteNode在颠簸的地形上顺畅地行走(下图评估" Bumpy Terrain") enter image description here

我还希望图像具有SKPhysicsBody。我怎么可能这样做?

1 个答案:

答案 0 :(得分:3)

刚刚完成(在Unity中)基本前提如下:

  • 将一条光线从身体中心向下射到它的脚部#34; (即射线长度等于身体/节点的一半高度)
  • 如果射线与身体相交,检查身体是否可以走路" (即以某种方式定义为地面体,为简单起见,您可以检查身体是否是非动态的,更细粒度的控制比较相交体的类别和接触位掩码)
  • 如果你找到一个相交的,可行走的身体,将身体的位置设置为射线撞击另一个身体的位置,再加上身体/节点高度的一半

在Sprite Kit中,从光线投射获取交叉点的唯一方法是使用SKPhysicsWorld类的enumerateBodiesAlongRayStart:end:usingBlock:。如果你的角色只能直接走(也就是说他不会旋转以适应地形,而且地形没有"循环")你只需要检查Y坐标交点。

假设您的节点的位置在Y = 340,并且光线在Y = 310处相交,并且您的节点的高度为80,那么:

(340 - 310) + 80 / 2 = 70

然后70是距离你的玩家应该定位的地板的距离,确切地说,它是光线撞击地板的Y坐标(310)加上70,这给你Y = 380作为新的高度。当你走过飞机时,保持X坐标并改变Y坐标。

当然地平面需要是一个物理体,特别是使用边缘形状的身体。有一些工具可以让你从形状设计这些点,最突出的是PhysicsEditor。但首先,您可以尝试使用单个线段,以一定角度倾斜,以测试您的角色是否正确地向上或向下行走。

请注意,如果你正在使用物理学,你应该在确定地面命中后将物理体的速度设置为0,0,否则速度可能会累积,身体最终会从地板上掉落,或者可以&#39跳跃,或做其他奇怪的事情。