我想通过使用圆半径和移动角来移动圆形运动中的精灵。
我知道例如精灵正在以半径为10的圆圈移动,它的当前位置是(387,38),角度是28度。现在我不想移动它说沿着圆周边100px。
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(使用余弦和窦)。应该有一种更快的方式我相信,但我找不到任何人这样做。
我标记cocos2d的原因是因为我正在使用它,有时游戏框架提供了帮助三角函数的函数。
答案 0 :(得分:4)
试试这个:
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。
答案 1 :(得分: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
答案 2 :(得分:1)
计算原点,然后使用polar co-ordinates沿圆圈移动点。