首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Box2d setTransform

Box2d setTransform
EN

Stack Overflow用户
提问于 2015-10-13 04:59:29
回答 1查看 2.3K关注 0票数 1

设置场景:·我们的环境: LibGdx Android & iOS /如果您不了解LibGdx,没关系,只需知道这个程序是为iOS和安卓构建的

·我们的屏幕上什么都没有,只有一个Box2d圆圈

好的,那么,我需要做什么呢?我需要使我的Box2d圈“传送”到屏幕被点击的地方.但是我需要它有一定的速度,所以如果它与w/其他物体碰撞,它会把另一个物体抛开。

我目前使用的是body.setTransform(),但是我没有速度,人们说它很有问题。

我该怎么做?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-13 06:35:13

setTransform方法本身并不是buggy。由于忽略物理而会引起一些麻烦,当出现时会出现这种情况

  • 使用关节-关节提供了一些约束,这种“剧烈”的变化可能会使身体行为怪异。
  • 碰撞存在--因为转换后的物体可以被“推”到另一个物体中。

当使用setTransform时,您所描述的情况完全是典型的情况,我在这里没有理由害怕它。这里也不需要任何速度。

但是,如果您决定将“传送”机制更改为将物体移动到世界点的速度,那么您应该:

  • 通过减去目标位置和身体位置来计算速度矢量 Vector2速度= target.sub( body.getPosition() );//其中目标是接触点的Vector2
  • 如果你需要的话,把速度限制在某个最大值--我猜是(这是可选的) //可选的velocity.nor();velocity.mul( MAX_VALUE );//MAX_VALUE是浮点数
  • 将速度设定在身体上 速度(body.setLinearVelocity );
  • 添加到主循环(呈现方法)检查物体是否处于目标位置(或在某个范围--由于精度原因,如果您要限制速度的话,精确定位目标的可能性很小-如果不是,我猜它应该在world.update()的一次迭代之后处于目标位置)。 if( body.getPosition().sub(目标).len() < SOME_PRECISION ){ body.setLinearVelocity(新Vector2(0,0) );}

您也可以查看Box2D MouseJoint,尽管我从未使用过它,在这里也不能提供任何提示。

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

https://stackoverflow.com/questions/33094452

复制
相关文章

相似问题

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