c++ - 从 Sprite 的位置和旋转获取位置偏移

标签 c++ rotation position cocos2d-x

我正在使用 C++ 和 Cocos2d-x,我试图让 Sprite 始终对准鼠标光标。我设法让它工作,但我注意到枪管并没有完全对准光标,而是玩家的中心。

我使用这段代码让玩家跟随光标:

Vec2 playerPos = getPosition();
this->setRotation(-CC_RADIANS_TO_DEGREES((playerPos - targetPos).getAngle()) - 180);

接下来,我尝试向 playerPos 添加一个偏移量,以尝试使用以下代码定位枪的喷嘴:

Vec2 gunNozzlePos = getPosition() + Vec2(58, -10); // Added offset
this->setRotation(-CC_RADIANS_TO_DEGREES((gunNozzlePos - targetPos).getAngle()) - 180);

但玩家旋转后,位置并不跟随 Guzzle 。

这是显示我的问题的 gif:

Issue

如何考虑玩家的旋转来定位枪的喷嘴位置?

最佳答案

每个角度的偏移位置应该不同。

据我了解:

  • 如果角度为 0,偏移量应为 (58, -10)
  • 如果角度为 90,则偏移量应为 (10, 58)
  • 如果角度为 180,则偏移量应为 (-58, 10)
  • 如果角度为 270,则偏移量应为 (-10, -58)

所以偏移量应该这样计算:

Vec2 gunNozzleOffset = Vec2(58 * cos(yourAngleInRadians) - 10 * sin(yourAngleInRadians), -10 * cos(yourAngleInRadians) + 58 * sin(yourAngleInRadians))
Vec2 gunNozzlePos = getPosition() + gunNozzleOffset;

告诉我它是否有效。

EDIT(标志错误)

Vec2 gunNozzleOffset = Vec2(58 * cos(yourAngleInRadians) + 10 * sin(yourAngleInRadians), -10 * cos(yourAngleInRadians) + 58 * sin(yourAngleInRadians))
Vec2 gunNozzlePos = getPosition() + gunNozzleOffset;

关于c++ - 从 Sprite 的位置和旋转获取位置偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47155837/

相关文章:

c++ - 我如何指定必须静态链接库 X?

image-processing - 旋转图像中的脸

jquery - 如何在鼠标单击时重复旋转变换?

android - 在 LinearLayout 中获取 View 的位置 (Android)

Vim 从上次关闭的光标开始

html - 2 div 的位置不适用于 firefox

c++ - 如何编写工厂函数来初始化 C++ 中的 constexpr 引用?

c++ - 如何将 char 数组解析为 double

c++ - 错误 : request for member 'push_back' in 'myVector' , 是非类类型 'std::vector<Base>*' ?

c++ - 如何在字符串中以圆周运动移动单词?