このプログラミングゲームを参考にして、現在作成中です。
WPFを使用してキャンバスをアニメーション化し、このBeginAnimation
メソッドを使用して、キャンバスを別のキャンバス間で変換(移動)します。
BeginAnimationでは、xとyの両方の座標From
と座標を指定する必要があります。これは、次のように使用している方法です。To
//X
Animator_Body_X.From = Translate_Body.X; //Current x-coordinate
Animator_Body_X.To = //The end X-coordinate
Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);
//Y
Animator_Body_Y.From = Translate_Body.Y; //Current y-coordinate
Animator_Body_Y.To = //The end Y-coordinate
Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);
次に、メソッドから利用できる特定の角度を使用してキャンバスを変換する必要があります。
だから私の質問は、キャンバスが現在回転している角度(0-359)を前提として、(キャンバスが現在配置されている場所の)x座標とy座標、および距離(px)を開始して、終了座標を計算するにはどうすればよいですか?つまり、キャンバスが最終的に翻訳される場所です。
代替テキストhttp://img244.imageshack.us/img244/4794/canvastranspositionmi5.jpg
上の画像では、私が達成したいことの例を描いています。
キャンバス(黒枠のボックス)の現在の方位(角度)が130度であり、200ピクセル(現在向いている場所に応じて、その角度を下るパスをたどる)に変換する必要があるとします。キャンバスの新しい座標(アニメーションが停止する場所:破線の境界線ボックス)になりますか?停止する場所のこれらの新しい座標を計算するにはどうすればよいですか?
[更新]解決策:
アンディとキャメロンの両方の助けを借りて、それは最終的に意図したとおりに機能しています。
そして、ここに動作するコードがあります:
double headingRadians = Heading * (Math.PI / 180);
Animator_Body_X.From = Translate_Body.X;
Animator_Body_X.To = Math.Sin(headingRadians) * pix + Translate_Body.X;
Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);
Animator_Body_Y.From = Translate_Body.Y;
Animator_Body_Y.To = ((Math.Cos(headingRadians) * pix) * -1) + Translate_Body.Y;
Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);