【问题标题】:Rendering a joint? [libGDX/Box2D]渲染关节? [libGDX/Box2D]
【发布时间】:2023-04-03 20:20:01
【问题描述】:

您将如何在 box2d 中渲染关节?例如,如果你要制作一个抓钩,你如何制作它以使精灵或其他东西完全跟随它的动作?我试图创建一个与关节处于同一位置的 Body,但我一直在努力使其始终位于关节的顶部。

【问题讨论】:

  • 显示到目前为止你得到了什么,一些代码
  • 这是我的绳索类,ATM 我有它,通过距离关节连接的一堆身体形成一个链状的东西,这应该是连接玩家和云的绳索。这不起作用,因为 box2d 中的关节会吸吮并以最小的力开始喷出。 pastebin.com/3qQMQ0Xw 我想尝试做一个大的部分来连接播放器和天花板,看看它是否更稳定(然后只需在该身体上添加一个精灵来渲染它),我目前不在家所以不能尝试,但希望你能明白我的目标是什么。
  • 你想在绳索上启用碰撞吗?如果是,则在绳体上使用旋转接头。如果没有,那么你就不需要身体来拉绳子了。
  • 不,我不需要碰撞检测。如果可以的话,我只想拥有超级简单的单距离关节,但我应该如何在屏幕上绘制它?关节没有任何方法可以告诉你喂给精灵的角度和类似的东西。

标签: libgdx box2d


【解决方案1】:

你需要做的就是:

您将所需精灵的原点设置为旋转点(例如底部中心)一次。

sprite.setOrigin(sprite.width()/2, 0);

你确定两个向量之间的角度 你的距离的锚点在 oyur 更新方法中联合。请注意,您可能必须将本地锚点转换为世界点。

float angle = playerAnchorPoint.sub(ceilingAnchorPoint).angle();

然后你设置位置和角度:

sprite.setPosition(playerAnchor.x - sprite.width()/2, playerAnchor.y);
sprite.setRotation(angle);

【讨论】:

  • 我试过了,但我似乎在旋转时做错了,因为 psrite 只是不旋转。转换为世界积分是什么意思?
  • 好吧,您将身体的锚点设置在局部坐标中(相对于身体中心)。要获得从玩家身体到天花板身体的矢量,您必须将本地数据转换为世界数据。像这样:Playerbody.getWorldPoint(Joint.getLocalAnchorA) 和 ceilingbody.getWorldPoint(Joint.getLocalAnchorB)
  • 好的,我现在开始工作了,它似乎以正确的方式旋转,但速度非常快,可能与 PPM 值有关。我会弄清楚的。感谢大家的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多