4

円の半径と移動角度を使用して、スプライトを円運動で動かしたいと考えています。

たとえば、スプライトが半径 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 をタグ付けした理由は、それが私が取り組んでいるものであり、ゲーム フレームワークが三角法を支援する機能を提供する場合があるためです。

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 に答える