さて、私は自分の問題の解決策を探して探しましたが、それを修正していないようです。
回転する「大砲」でゲームを作成する必要があります。大砲は、パネルの中央に配置された単純な長方形で、キーボードで回転できます。片方の端を中心に回転します。向こう側の端から飛び出したい。以下を使用して、弾丸を発射する場所の開始点を見つけました。
x = a + dia * (float)Math.Cos(angle);
y = b + dia * (float)Math.Sin(angle)
ここで、「a、b」は中心座標を回転させ、「dia」は長方形の対角線、「angle」は長方形の半分の角度です。
public float rotate = 0.0f;
g.TranslateTransform(a , b);
g.RotateTransform(rotate);
リストに入れた弾丸用の独自のクラスがあります。ここまでは順調ですね。しかし、大砲を回転させると、弾丸が先端から出なくなります。弾丸は、私が望む場所から遠くに現れ始めます。これは、このコードが原因です。
x = (float)((x * Math.Cos(rotate)) - (y * Math.Sin(rotate)));
y = (float)((x * Math.Sin(rotate)) + (y * Math.Cos(rotate)));
これは、大砲の先端のx、y座標を更新することになっています。削除すると、同じ場所から発砲するだけです(たわごとはありません)。X、Yを更新して長方形の端から出てくるように、どのコードを書く必要があるかを誰かに説明してもらえますか?それは私を夢中にさせています。
編集:早朝に画面を見つめて私の答えを見つけました。「新しいx、y座標を見つける」必要はありませんでした。回転するたびに少し動かす必要のあるフロート番号で元の角度を更新するアップデーターを作成しただけです。はぁ!とてもシンプルですが、とても見づらいです。