1

中心点を基準にしていくつかのビットマップをアニメーション化しようとしています。すべてがその中心点から始まるわけではありませんが、その中心点からの力がそれらにぶつかり、放射状に外側に押し出されて、ステージから完全に飛び出すように飛んでほしいと思います。

だから:私は中心点と、その周りに配置された各ビットマップのxとyの位置を知っています。それぞれについて、中心からそのx、y点まで線を引くことができます。そうすれば、その線が水平に対して形成する角度を取得し、その線のさらに外側に目的地を設定できるはずです。ビットマップはその時点までトゥイーンアウトされます。それがMath.atan2の目的だと思います。

ビットマップの配列を反復処理するときに得られるものは次のとおりです(iはオブジェクトです)。

var angle:Number = Math.atan2(i.bitmap.y - centerY, i.bitmap.x - centerX) * 180 / Math.PI;
var dist:Number = 200;              //arbitrary number, just to test
 destX = centerX  + dist * Math.cos(angle);  //destination x
 destY = centerY  + dist * Math.sin(angle);  //destination y

これらのものが放射状に滑る代わりに、それらは飛び回っています。

私はatan2と私が間違っていることを正確に理解するのに苦労しています。

ありがとう、

デビッド

4

4 に答える 4

1

ベクトル演算だけを使用して、三角関数なしで同じ効果を達成できます。

var dist:Number = 200;              //arbitrary number, just to test
var dx:Number = i.bitmap.x - centerX;
var dy:Number = i.bitmap.y - centerY;
var length:Number = Math.sqrt( dx*dx + dy*dy );
var normalizeddx:Number = dx / length;
var normalizeddy:Number = dy / length;
 destX = centerX  + dist * normalizeddx;  //destination x
 destY = centerY  + dist * normalizeddy;  //destination y

これは、三角関数を使用するよりもはるかに高速です。actionscriptの言語の詳細がわからないので、おそらくこれをさらに最適化することができます。

于 2011-05-09T21:19:42.923 に答える
0

atan2は私が思うこの状況で動作する可能性がありますが、私はatanを使用します。

var angle:Number = Math.atan((i.bitmap.y-centerY)/(i.bitmap.x-centerX));

添加:

私がちょうどあなたが望むことをしているように見える別のフォーラムで見たコード(あなたが最初に書いたものとわずかな違いしかありません)

var angle:Number = Math.atan2(mouseX,mouseY-180)-Math.PI/2;
var xNew:Number = 20*Math.cos(angle);
var yNew:Number = -20*Math.sin(angle);
于 2011-05-09T21:06:22.603 に答える
0

角度をラジアンに保つために、* 180/PIを削除してみてください。

var angle:Number = Math.atan2(i.bitmap.y-centerY, i.bitmap.x - centerX);

次に、destXとdestYをに変更します

destX = i.bitmap.x  + dist * Math.cos(angle);
destY = i.bitmap.y  + dist * Math.sin(angle);
于 2011-05-09T21:10:23.967 に答える
0

* 180/Math.PIの部分を取り除く必要があります。角度はラジアンである必要があります。したがって、最初の行は次のよう
var angle:Number = Math.atan2(i.bitmap.y - centerY, i.bitmap.x - centerX); になります。残りは問題ないはずです。

于 2014-01-02T06:11:43.297 に答える