【问题标题】:Positioning sprites when using multiple fixtures per body每个主体使用多个固定装置时定位精灵
【发布时间】:2012-03-15 06:45:27
【问题描述】:

我将 Cocos2D 与 Box2D 一起使用,并从具有单个夹具的主体移动到具有多个夹具的主体,每个夹具具有相应的精灵。通过使用

body->GetTranform().p.x + shape->m_centroid.x
body->GetTranform().p.y + shape->m_centroid.y
body->GetTransform().q.GetAngle()

我能够正确定位精灵,直到身体旋转。到那时,一切都出错了,每个精灵都相对于它的兄弟姐妹旋转,整个组围绕我认为是 (0, 0) 的身体锚点旋转。

我的猜测是 Cocos2D/Box2D 有一个简单的内置方法来执行必要的转换,但我无法找到它的文档。正确定位我的精灵的最佳方法是什么?

【问题讨论】:

  • 您使用的是弧度还是度数? GetAngle 为您提供弧度。
  • 是的,我忽略了代码示例中的米->像素和弧度->度转换。正如我所提到的,我已经使用单夹具主体完成了这项工作。问题是 b2PolygonShape 的 m_centroid 没有被转换。我期望找到类似 shape->getTransform() 的东西,但它不存在。然而,我终于找到了我需要的东西。请参阅下面的解决方案。

标签: cocos2d-iphone box2d


【解决方案1】:

尝试在更新刻度函数中相对于身体中心旋转精灵。

【讨论】:

    【解决方案2】:

    我终于找到了我要找的变换函数。

    b2Vec2 ptWorld =body->GetWorldPoint(shape->m_centroid);
    

    将相对于身体原点测量的夹具形状的坐标转换为世界坐标。从米转换为像素后,ptWorld的x和y坐标可以用来设置精灵的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-05
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多