Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift SpriteKit使用物理移动节点,而不是更新位置_Swift_Sprite Kit - Fatal编程技术网

Swift SpriteKit使用物理移动节点,而不是更新位置

Swift SpriteKit使用物理移动节点,而不是更新位置,swift,sprite-kit,Swift,Sprite Kit,我的主角通过触摸和握住他,然后向左或向右移动手指来移动角色。为此,我只需在touchesMoved()中用触摸位置的x位置更新节点的x位置(在平面上左右行走),并根据其移动方向应用动画 我想把它提升到一个新的层次,实现同样的效果,但是使用物理,这样当我移动完他并松开我的手指时,他可能会朝着他移动的方向滑动一点,考虑到我移动他的速度,如果这有意义的话。有人知道我怎样才能达到这个效果吗 我是否必须像我现在做的那样,在它移动时更新位置,同时还要施加力/脉冲?对于如何实现这一点有点困惑通过力、冲量或速度

我的主角通过触摸和握住他,然后向左或向右移动手指来移动角色。为此,我只需在
touchesMoved()
中用触摸位置的x位置更新节点的x位置(在平面上左右行走),并根据其移动方向应用动画

我想把它提升到一个新的层次,实现同样的效果,但是使用物理,这样当我移动完他并松开我的手指时,他可能会朝着他移动的方向滑动一点,考虑到我移动他的速度,如果这有意义的话。有人知道我怎样才能达到这个效果吗


我是否必须像我现在做的那样,在它移动时更新位置,同时还要施加力/脉冲?对于如何实现这一点有点困惑

通过力、冲量或速度移动物理身体会自动更新玩家的位置

所以你必须用正确的方法来实现你的目标。但基于此,我建议将您的
.position
代码替换为
.physicsBody!。速度
移动触摸屏中的代码。然后,在你的触控状态下,你可以施加一点冲动,给玩家一点“冰上”效果,让他们继续玩下去

你需要试验你想让角色以正确的速度移动的速度,然后你还需要玩脉冲数字来获得正确的速度

但这可能会有点棘手,在TouchsMoved中。。。因为在某个时刻,你会想将速度重置为0(因此当你的手指停止时,它们停止移动)

为此,您需要使用
触摸对象的.code>上一个位置
,并比较X移动的距离。如果移动的距离X>0(或某个死区阈值),则应用速度;如果deltaX为0,则将速度设置为0

这实际上可能比仅仅使用
.position
移动角色,然后让角色在触摸时滑动一点物理更复杂


你必须用它来做正确的选择。

只要给一个节点一个力、冲量或速度就可以了。也不需要更新职位,这实际上可能会产生预期的结果。谢谢你,我会尝试这种方法!另外,您知道为什么在启用
isDynamic=true
后启动时,我的角色会丢失吗?他应该与他下面的地面接触,也受重力的影响是错误的。我似乎不明白他为什么失踪了。我在问题中添加了一些代码。我也试着把他限制在地板上,但这似乎也不起作用。@Brejuro有可能重力影响的命令没有通过。确保您正在使用的pb不是
nil
。此外,您还可以使用simple
print
查看他要去哪里(上方、下方等)。不过,你可能应该提出一个新问题,我可以回答这个问题,告诉你如何限制他。由于这是1天中两个独立的问题,谢谢。我就不说了,我只是觉得这可能很简单,可以发表评论。我会开始实施这个@Brejuro我有一个keepPlayerInBounds()函数,如果您还有其他问题,我可以与您分享。这在物理体和平台上是很常见的。这可能(将)是令人沮丧的时候!