0

私はcocos2dを使用してゲームを作成しており、敵の現在の位置から特定の長さの角度でショットパスを作成しようとしています。

これが私が銃を回転させて撃つために使用しているコードです。

gun runAction: [CCSequence actions: [CCDelayTime actionWithDuration:2.0],
                 [CCCallBlockN actionWithBlock:^(CCNode *node)
                  { [self shootEnemyLaserFromPositionAtAngle:gun];}],
                 [CCRotateTo actionWithDuration:0.5 angle:250],
                 [CCCallBlockN actionWithBlock:^(CCNode *node)
                  { [self shootEnemyLaserFromPositionAtAngle:gun];}],
                 [CCRotateTo actionWithDuration:0.5 angle:230],
                 [CCCallBlockN actionWithBlock:^(CCNode *node)

私はこの方程式を使用してベクトルを計算しています(このコードはshootEnemyLaserFromPositionAtAngleにあります):

CGPoint endPoint = CGPointMake(gun.position.x + (800 * cos(gun.rotation)), gun.position.y + (800 * sin(gun.rotation)));
NSLog(@"end Point x: %f, %f", endPoint.x, endPoint.y);

shipLaser.position = gun.position;

CGPoint shootVector = ccpNormalize(ccpSub(endPoint, shipLaser.position));
CGPoint shootTarget = ccpMult(shootVector, _winSize.width*2);

[shipLaser runAction:[CCSequence actions: [CCMoveBy actionWithDuration:4.0 position:shootTarget],
                      [CCCallFuncN actionWithTarget:self selector:@selector(invisNode:)], nil]];

私の問題は、それが奇妙な方向に飛び散ってしまうことです。私のendPoint値はそのように出力されます。以下に銃の回転角度も印刷しました。

angle: -90.000000
end Point x: 21.541107, -499.593536
angle: -110.000000
end Point x: -419.216644, 250.997940
angle: -130.000000
end Point x: 86.166939, 959.688538

角度が突然負になっていることに気づきました。正の角度に変更してみました(負の角度に360を追加)が、同じエンドポイントになりました。

誰かが私に何か試してみるのを手伝ったりくれたりできますか?

ありがとう!

4

2 に答える 2

2

cos()およびsin()関数は両方とも、ラジアンの入力から値を返します。あなたはCC_RADIANS_TO_DEGREESそれを修正するために使用したいと思います。

于 2012-10-01T22:01:02.520 に答える
1

gun.rotationサインまたはコサインを見つけようとする場合は、度からラジアンに変換する必要があります。float gunRotation = CC_DEGREES_TO_RADIANS(gun.rotation);(または)を使用doubleして、それを三角関数に渡します。もちろん、これらのフラグメントの外部に他の問題が潜んでいる可能性があるため、他の関連する問題を見つけた場合は、質問を更新してください。

于 2012-10-01T21:57:09.587 に答える