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

Box2d/LibGDX:沿着精灵的原点旋转夹具。参见插图

卓学智
2023-03-14

如果我将这个圆形精灵的身体应用于AngularImush,它会沿着它的中心旋转,这就是我想要的。但是它的碰撞蒙版固定装置(绿色)沿着它自己的中心旋转,而不是精灵的中心。我如何让它也沿着精灵的中心旋转,这样碰撞蒙版和精灵就保持同步?

例如,在下面的图片中,当圆圈旋转,红色部分到达左上角时,我希望绿色碰撞蒙版在#3的位置。但是发生了#2。我知道为什么会发生这种情况,但是我如何才能实现我在这里试图实现的目标?

共有1个答案

戈华茂
2023-03-14

您需要创建两个装置-一个是精灵大小(精灵应该与此装置居中),另一个移动到圆的边缘(您当前的碰撞装置)

BodyDef bodyDef;

...

Body body = world.createBody(bodyDef);

FixtureDef circleFixture = new FixtureDef();
FixtureDef collisionFixture = new FixtureDef();

CircleShape circle = new CircleShape();
circle.setRadius(spriteRadius);
circleFixture.shape = circle;

//same for collision fixture with proper shape - (0,0) i a center of circle
float[] vertices = new float[]{x1, y1, x2, y2...};

ChainShape chain = new ChainShape();
chain.createLoop(vertices);
fixtureDefs.peek().shape = chain;

现在,如果你需要保持碰撞夹具在圆的边缘上,只需定义将它放在那里的点——例如,对于半径为2顶点的圆

{5, -1, 6, 0, 5, 1, 4, 0}

会给出类似的东西

旋转之后,它的行为应该是

当然,你需要在圆圈夹具的中心渲染你的精灵

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

  • 我认为当你对一个物体施加力时,它会施加在物体的原点(可能是质心)。现在我正尝试创建类似俄罗斯方块的块,并通过应用如下所示的linearPulse来使它们跳跃: 这工作很好,如果你只有一个盒子的夹具作为身体,但当你创建多个夹具的原点被放错了,我不能把它放在夹具的中心。 下面是我的意思:

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

  • 我正在为我的游戏设计一个区块旋转组件,我遇到了一个我无法理解的小问题。基本上,我希望能够沿所有三个轴旋转网格组件。玩家一次只能旋转一个轴,旋转90度或-90度。我还希望玩家始终根据世界的X、Y和Z轴旋转网格,而不是块的相对轴,它将随着旋转而改变。我如何做到这一点? 无旋转的网格: 网格沿X轴逆时针旋转90度: 这里的问题是,如果我想沿着Y轴旋转块,相反,它将沿着Z轴旋转块,因为块现在被旋转。我如何

  • 有一个运行Libgdx的Android应用程序,其中有很多精灵。目前,我根据它们所属的类别给它们涂上不同的颜色,例如“红色”、“绿色”、“蓝色”等。然而,我认为我更喜欢只给雪碧的一部分涂颜色,而不是整个雪碧。 目前我使用: 用于给批次上色,并将其应用于整个雪碧。当那一组完成后,我改变颜色,转到下一组。当完成分组时,我重置批次颜色。 有没有着色器/搅拌器的方式只着色精灵的一部分?例如,任何在我的纹理

  • 我想一起旋转一组精灵,多边形和矩形,图a)显示2个精灵,边界多边形和矩形,这组围绕大矩形中心旋转90度(两个矩形的联合)。 以下代码创建图b)。它不会围绕联合矩形的中心旋转精灵和多边形。 下面的代码创建了图c)。当我试图将精灵和多边形移动到矩形位置时,出现了对齐错误。 问题是旋转后如何将精灵与矩形对齐(即类似于图a,角度=0)。提示:问题出现是因为精灵在绘制时会旋转,因此精灵和矩形之间会错位对齐。