【问题标题】:Cocos2D Rotation and Anchor pointCocos2D 旋转和锚点
【发布时间】:2023-03-12 20:56:01
【问题描述】:

我遇到的问题是,当我更改锚点时,精灵会自动相对于当前锚点旋转。我不希望这种情况发生。

我遵循的步骤

  1. 创建一个带有锚点 (0.5, 0.5) 的精灵
  2. 将锚点更改为 (0,1)
  3. 将精灵旋转到 90 度。 (使用 CCRotateBy。Sprite 旋转正确)
  4. 将锚点更改为 (0.5, 0.5)(到目前为止一切都很好。这是我需要保持的位置)。现在 sprite.rotation 是 90。
  5. 我将锚点更改为 (1,0)(Sprite 自动相对于给定的锚点旋转 90 度 - 我需要停止这种行为)

有没有办法将精灵的旋转重置为 0,而无需实际旋转纹理(即,保持纹理处于当前形式 - 实际纹理旋转到 90 度)并随着步长改变锚点或位置4,这样我就可以从第5点继续。

【问题讨论】:

    标签: iphone cocos2d-iphone ccsprite


    【解决方案1】:

    正如 Lukman 所说,锚点总是会影响旋转,因为您的目标是能够使用与旋转不同的锚点来指定精灵位置,我建议将一个空的 CCNode 作为精灵的父节点。

    这样,您可以将精灵上的位置设置为相对于该父节点,以补偿您的锚点变化,然后将锚点保留在精灵上进行旋转,但使用父节点作为位置。

    【讨论】:

      【解决方案2】:

      anchorPoint 同时影响positionrotation。您无法阻止它影响其中任何一个。

      但是从阅读您的问题来看,由于您想防止anchorPoint 影响旋转,我在这里假设您更改anchorPoint 的原因是为了位置,例如您将其设置为@ 987654326@ 因为您希望精灵的右下角,而不是精灵的中心,成为您设置位置的位置。

      我的建议是:根本不要更改anchorPoint,而是更改设置精灵位置的方式。您可以使用这个小功能来调整位置:

      CGPoint adjustedPosition(const CGPoint position, const CGPoint anchor, const CGSize size) {
          return CGPointMake(position.x - (anchor.x - 0.5) * size.width, position.y - (anchor.y - 0.5) * size.height);
      }
      

      现在,假设你想在定位时使用 (1,0) 的 anchorPoint,而不是 sprite.position = ccp(200, 300),你只需要这样做:

      sprite.position = adjustedPosition(ccp(200, 300), ccp(1.0, 0.0), sprite.contentSize);
      

      如果你愿意,我稍后会发布数学背后的逻辑。否则,我希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        也许它会帮助您在正确的坐标中为精灵安装一个锚点。

        void SetAnchorPosition(CCSprite * sprite, const CCPoint & point) { 静态 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); 双 x = ((双)1/(双)winSize.width)*(双)point.x; 双 y = ((double)1/(double)winSize.height)*(double)point.y; sprite->setAnchorPoint(ccp(x,y)); sprite->setPosition(点); }

        【讨论】:

          【解决方案4】:

          您可以在 touchEnded 方法中添加一行作为强制替代:

          -(void)touchEnded:(UITouch *)touch withEvent:(UIEvent *)event{
          
              _yourSprite.rotation = 90;
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-15
            • 1970-01-01
            • 1970-01-01
            • 2022-08-19
            • 2012-12-13
            相关资源
            最近更新 更多