当前位置: 首页 > 知识库问答 >
问题:

Libgdx/Physics Editor身体旋转

耿敏达
2023-03-14

还有一个美好的夜晚。

我有以下问题:

一个Box2d动态体,带有一个夹具,所有顶点从体的原点以位置x/y放置。http://i.stack.imgur.com/MXQRr.png

但是旋转是在身体原点0/0上,而不是在质量中心。

所以我尝试了以下方法:

1:将身体的原点设置在身体的中间(顶点正负) 问题:旋转工作,精灵定位几乎是不可能的

2:设置海量数据中心=原点Body.x宽度/ 2,原点Body.y高度/ 2问题:就像我什么都不做,仍然围绕原点0,0旋转

在下面的代码片段中,您可以看到我的实例化。

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.DynamicBody;
    bodyDef.position.set(new Vector2(200, 2));

    body = world.createBody(bodyDef);

    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.density = 0.6f;
    fixtureDef.friction = 0.4f;
    fixtureDef.restitution = 0.2f;


    bodyLoader.attachFixture(body, "Rocket1n2", fixtureDef, WIDTH);
    originOfBody = bodyLoader.getOrigin("Rocket1n2", WIDTH);
    MassData data = body.getMassData();
    data.center.set(Box2DUtils.getWidth(body) / 2, 0);
    data.I = body.getMassData().I; //without this line programm fails with assertion
    body.setMassData(data);
    Vector2 cpy = data.center.cpy();

我用下面的代码旋转播放器:

body.setAngularVelocity(addition); //addition is predefined(atm 1 / -1)

我目前使用aurelia(?)的身体物理编辑器与一些黑客工作,我对其他对象没有任何问题,因为我不旋转它们。放置就像一个魅力。

我希望我犯了一个重大错误…通常box2d必须自动计算旋转中心(质量中心)?

这次我身不由己。:(

共有1个答案

龚联
2023-03-14

我建议你用第一种方法工作。

将身体的原点设置在身体的中间(顶点正负)问题:旋转工作,精灵定位几乎是不可能的

旋转效果很好,但精灵定位很困难。去年我在做物理游戏时也遇到了同样的问题。帮助我的是看清楚定位是如何工作的。

Box2D主体是中心聚焦的。也就是说,调用物体的位置,会得到物体的中间。精灵是角聚焦的,这意味着精灵的位置是它的左下角。因此,你不能把它们都设定为一样的东西。我建议将精灵从身体的位置向下向左移动身体高度和宽度的一半。

 类似资料:
  • 我用libgdx来创建我的游戏,我用box2d作为物理引擎,我有一个多边形形状设置为box.5x的身体。5(1x1米),我想绕着它的中心旋转。我试着这么做: 我不确定,但我认为Vector2是用来设置形状的原点的,所以原点是0.50x0.50的一半,所以这意味着它在中心,但它仍然不起作用,这意味着我的代码或我对如何设置原点的理解有问题。

  • 现在我想把sprite的位置相应地放在我旋转的身体上。在这里我所做的 这是我怎么画的 当我运行我的代码时会发生奇怪的事情。我看到主体正确旋转,但是由于这一行所以sprite的位置始终与主体位置相同。我该怎么做呢?

  • 我正在使用平铺地图编辑器创建一个简单的平铺地图。在我的地图中,我有几个矩形,如果我创建一个宽度为50,高度为10的矩形,并将其旋转正好90°,保存地图并将其加载到我的LibGDX项目中,形状会正确呈现——但是如果我使用随机角度,例如26°,然后我再次渲染地图,我没有得到所需的结果,事实上我得到了完全相反的所需角度。 我使用以下方法直接从地图读取平铺地图浮动: 数学。degRad将直接从地图属性读取

  • 当我旋转图像(图像类)时,我需要帮助解决一个小问题。 这个想法是旋转一个球形图像,移动是通过手指的触摸和拖动,它可能是顺时针的,也可能不是顺时针的,到目前为止,这是正确的。 我希望当球体的角度是90的倍数时会发生一些事情,问题是当我用手指旋转球体时,有时它太快了,以至于球体的角度不总是通过90的倍数,例如,如果它在87,当我移动手指时,它会在不接触90的情况下移动到94。 这是我的拖动旋转代码 我

  • 我正在用一艘宇宙飞船做一个游戏,当按下“前进”按钮时,后面会出现一个火的图像。这只在太空船垂直站立时起作用。当它倒转时,它与宇宙飞船的后部没有完全对齐。这是我为其创建的类的更新函数。 我试着将原点设置为火箭的原点,这对我来说似乎是合乎逻辑的,但我认为我不完全理解原点是什么。 [编辑1] 我不认为问题出在原点上,我现在把它设置为 我认为这个问题与我总是将y设置为(火箭弹射出的火的高度是火箭弹高度的一

  • 好吧,我真的很困惑,我以前旋转过精灵,没有问题,比如当船在海洋中移动时旋转它,但是出于某种原因,这次我遇到了一个非常大的问题。所以我在资产文件中创建了一个纹理,但不是静态纹理。我使用以下方式加载纹理: 然后我通过调用来调用主类中的资产: 然后我有一个专门为这个主要角色设计的动画课程,因为他的动画与其他角色非常不同。 然后我有一个渲染类来绘制所有东西,我有对象在一个名为的世界对象中,我用以下方式绘制