4

我想通过使用圆半径和移动角度以圆周运动移动精灵。

例如,我知道精灵在半径为 10 的圆圈中移动,它的当前位置是 (387,38),角度是 28 度。现在我不想移动它说,沿着圆的周长 100 像素。

描述场景的图片

p1 = x&y coordinate, known (387,38) in example with movingangle 28 degrees
r = radius, known (10 in example)
l = distance to move along bend, known (100px in example)
p2 = new point, what is this x and y value?

我有一个可行的解决方案,但我不太喜欢它。这对我来说有点没有意义,它需要的计算比我认为的要多。它的工作原理是首先使用 p1 计算中心点,然后向后做同样的事情,可以说得到 p2(使用 cosinus 和 sinus)。我相信应该有一种更快的方法,但我找不到任何人这样做。

我标记 cocos2d 的原因是因为这就是我正在使用的东西,有时游戏框架会提供函数来帮助处理三角函数。

4

3 回答 3

6

试试这个:

a1 = 28*(π/180)
cen.x = p1.x - r*SIN(a1)
cen.y = p2.y - r*COS(a1)
a2 = a1 + l/r
p2.x = cen.x + r*SIN(a2)
p2.y = cen.y + r*COS(a2)

没有比这更简单的了。从 p1 移动到圆心,然后移动到 p2。

于 2012-07-12T23:41:03.620 回答
3

您可以以非常简单的方式使用锚点的魔法来做到这一点=)任何节点的所有转换都是相对于它的锚点完成的。旋转也是一种变换。所以,你可以做这样的事情

CGFloat anchorY = neededRadius / spriteHeight;
[yourSprite setAnchorPoint:ccp(0.5f, anchorY)];
[yourSprite setPosition:neededPosition]; //remember that position is also for anchor point
[self addChild: yourSprite];
[yourSprite runAction:anyRotateAction]; // i mean, CCRotateBy or CCRotateTo
于 2012-07-13T08:09:03.987 回答
1

计算原点,然后使用极坐标沿圆移动该点。

于 2012-07-13T07:42:57.390 回答