首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PhysicsJS改变物体的位置

使用PhysicsJS改变物体的位置
EN

Stack Overflow用户
提问于 2015-12-14 18:15:27
回答 2查看 269关注 0票数 0

通过改变它的state.pos和state.old.pos,我能够将一个物体移动到一个特定的点。但它似乎失去了它的速度(和加速度,我想)。

这样做:

代码语言:javascript
复制
ship.body.state.pos.x = -context.width / 2 - ship.radius;
ship.body.state.old.pos.x = -context.width / 2 - ship.radius;

有更好的方法吗?我怎样才能改变它的位置,让其他一切保持不变?

文档里有关于它的东西吗?我找不到它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-19 17:38:58

我找到了解决办法。我没有查看所有的源代码,但是有了一些之前使用Physicsjs (https://coderwall.com/p/ntb6bg/metres-seconds-and-newtons-in-physicsjs)的经验,我开始认为它们可能是我问题的根源。

因此,显然verlet积分器是Physicsjs模拟的缺省值。我以前用过它,它很棒。但是verlet积分器使用以前的位置来计算下一个位置(不仅仅是位置,它比那个位置要复杂一些),所以手动修改它会把事情搞砸。我不知道如何“修复”,甚至不知道是否可能。但还有另外一种方法。

在我的例子中,我拥有的是一个简单的牛顿模拟,没有花哨的东西或疯狂的值(我在这里使用技术术语.)因此,欧拉积分器工作得很好,因为它不使用先前的位置来计算下一个位置,所以很好地“传送”我的物体而不失去速度、方向等。

只需记住加载积分器:

void function (define) { 'use strict'; define( [ 'physicsjs', 'physicsjs/behaviors/attractor', 'physicsjs/behaviors/body-collision-detection', 'physicsjs/behaviors/sweep-prune', 'physicsjs/bodies/circle', 'physicsjs/integrators/improved-euler' ], physicsModule ); // function physicsModule(physics) { return physics; } }(define);

并记住将积分器添加到仿真中:

void function (define) { 'use strict'; define( [ 'physics' ], simulationModule ); // function simulationModule(physics) { var simulation = physics(); simulation.add(physics.behavior('body-collision-detection')); simulation.add(physics.behavior('sweep-prune')); simulation.add(physics.integrator('improved-euler')); return simulation; } }(define);

票数 -1
EN

Stack Overflow用户

发布于 2015-12-21 20:21:18

您正在将两个位置移动到相同的固定位置。因此速度被设置为零。

您应该以相同的距离移动两个位置,以便保持它们之间的距离。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34273879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档