改变节点速度后的运动方向错误

时间:2016-10-17 20:29:11

标签: 3d game-physics scenekit

节点(汽车)碰撞到"加速"障碍物的类型,它应该加快。相反,它会减速并开始移出直线。我检查了代码是否正确执行了,我认为问题出在节点的坐标系或类似性质的东西上。

SceneKit中,y轴表示向上指向的轴,在我的情况下,一切都发生在一个平面上,x轴指向汽车运动方向,z轴指向左/右方向运动

在改变速度之前和之后,我用这段代码打印出它的速度:

print(car.physicsBody?.velocity)
car.physicsBody?.velocity.x += 0.2
print(car.physicsBody?.velocity) 

输出结果为:

SCNVector3(x: 0.245669901, y: -0.120455861, z: 0.119086474) and
SCNVector3(x: 0.445669889, y: -0.120455861, z: 0.119086474).

因此,汽车的x组件确实会增加,但不会让他向所需的方向移动。正如我所说,世界的X射线确实指向了我希望汽车继续前进的方向。在增加速度之前,汽车也在向正确的方向移动。

我想了解为什么增加汽车的速度会降低它的速度,为什么它有时会使它向右/左移动,好像速度矢量没有像以前那样应用在同一位置。

我之前尝试在汽车中心使用武力,使用以下代码:

car.physicsBody?.applyForce(SCNVector3(0.2, 0, 0), at: car.presentation.position, asImpulse: true)

和此代码(不在位置申请):

car.physicsBody?.applyForce(SCNVector3(0.2, 0, 0), asImpulse: true),
但是他们都给这辆车带来了类似的奇怪行为。

我做错了吗?我还能尝试什么?

2 个答案:

答案 0 :(得分:1)

我不熟悉SceneKit。但是,如果向向量的组件添加值而不更改其他组件,则向量的方向会发生变化。

如果您希望在不改变方向的情况下使矢量更长一定因子,则必须将所有分量乘以该因子。

答案 1 :(得分:0)

与'#34;加速障碍物'碰撞后,汽车的速度降低,因为我忘了关闭这两个物体之间的碰撞。因此,碰撞时,汽车失去了一些动能,导致他减速。