所以我有一个物体,它有一个物理体,重力影响它。它也是动态的。
当前,当用户触摸屏幕时,我运行代码:
应用力(0400)
物体向上移动约200,然后由于重力而回落。这种情况只发生了一段时间。其他时候,它只会使物体在Y方向移动50个单位。
我找不到模式…我把我的项目放在Dropbox上,这样如果有人愿意看的话就可以打开它。
https://www.dropbox.com/sh/z0nt79pd0l5psfg/bJTbaS2JpY
编辑:这似乎发生在玩家在撞击后有一段时间轻微地从地面弹起的时候。有没有办法让玩家完全不反弹?
编辑2:我试图用摩擦参数来解决这个问题,只有当摩擦力为0时才允许玩家“跳”(你会认为这是球员在空中飞行的所有情况),但摩擦力在任何时候都似乎大于0。否则,我如何才能检测到玩家是否正在触摸某个对象(而不是使用y位置)?
谢谢

最佳答案

建议的解决方案
如果您试图实现跳转功能,我建议您查看applyImpulse而不是applyForce。这是两者之间的区别,如Sprite Kit Programming Guide中所述:
您可以选择施加力或脉冲:
根据在施加力时和模拟下一帧被处理时传递的模拟时间量,施加一段时间的力。因此,为了向身体施加连续的力,每次处理新的帧时,需要做出适当的方法调用。力通常用于连续效应。
一个脉冲使身体速度的瞬时变化不依赖于已经通过的模拟时间量。脉冲通常用于身体速度的即时变化。
跳跃实际上是身体速度的瞬时变化,这意味着你应该施加一个脉冲而不是一个力。使用applyImpulse:方法,求出期望的瞬时速度变化,乘以体质量,并将其作为impulse参数插入函数中。我想你会看到更好的结果。
意外行为的解释
如果你调用applyForce:在你的update:函数之外,发生的是你的力乘以在施力时和在下一帧模拟处理时传递的时间量。这个乘法器不是常数,所以每次你用这种方式调用applyForce:时,你看到的速度变化不一样。

关于objective-c - applyForce(0,400)-SpriteKit不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19834932/

10-09 09:39