【问题标题】:Get position in front of sprite based on rotation根据旋转获取精灵前面的位置
【发布时间】:2012-01-27 22:36:31
【问题描述】:

我有一个基于触摸位置移动的精灵。我正在使用 box2d 进行碰撞,当精灵与另一个对象碰撞时,我将精灵旋转 180 度以远离碰撞,我的目标是移动在旋转方向上碰撞 x 个像素的精灵,基本上会反弹影响。

谁能告诉我如何根据旋转在精灵前面获得 x 个像素的位置。

谢谢

【问题讨论】:

    标签: cocos2d-iphone rotation normalization box2d


    【解决方案1】:

    您可以通过以下公式获得您的精灵所面对的方向:

    public static Vector2 AngleToVector(float angle)
    {
        return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
    }
    

    它返回的向量将准确指向您要计算的点。对其进行标准化,然后将其乘以您想要达到的像素数。这应该可以解决问题。

    returnedVector = AngleToVector(currentAngle);
    returnedVector.Normalize();
    returnedVector *= x;
    

    以上是 C# 代码,但您应该可以将其转换为您的语言。

    【讨论】:

      【解决方案2】:

      您可以使用 sprite 的 contentSize 或 boundingBox 来计算您应该移动的像素数量。考虑到节点锚定在它们的中心,您可以执行以下操作(仅在 x 轴上更改):

      sprite.position = ccp(sprite.position.x - xAmount - sprite.contentSize.width / 2, sprite.position.y)
      

      根据您需要将精灵移动到的方向和所需的 xAmount 更改总和的符号。

      干杯。

      【讨论】:

        【解决方案3】:

        您可以将本地点转换为全局点:

        CGPoint global = [sprite convertoToWorldSpace:ccp(x, 0)];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-15
          • 1970-01-01
          • 2014-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-19
          相关资源
          最近更新 更多