自作ゲームの大福島

プログラムの使えない素人がCF2.5を使ってゲームを作ってみるブログです

スポンサードリンク

CF2.5 三角関数を使った自力!円運動講座 ④

さあ今回でようやくこの講座も最終回で御座います。

今回は、円運動イベントの発展系のご紹介です。

是非実際に組んでみたって下さい

 

 

左回りの円運動

 

f:id:vobo:20170717223038g:plain

これは簡単。角度θに回転速度を加算ではなく減算させてやります。

以上!

 

 

円運動の中心点を動かす処理

これも理屈が分かれば簡単ですね!

f:id:vobo:20170717223451g:plain

ポイントは二つです。

①中心点の座標計算を「常に実行」で常時計算する事

②中心点オブジェクトに動作設定をしてやる事

 

今回は、中心点オブジェクトが、マウスカーソルの位置に同期するように設定しています。つまり、マウスカーソルを中心に円運動が発生するようになります。

これをプレーヤーオブジェクトに同期させてやれば、シューティングゲームのオプションのような動きが実現できますね!

 

円運動の半径を自動計算する処理

まずどんな処理なのか、という事ですが、

f:id:vobo:20170717224919g:plain

適当な座標にドラッグした回転オブジェクトと中心点の距離を自動計算し、円の半径を自動で計算するという処理になります。

今までのプログラムでは常に半径を前もって代入しなくてはなりませんでしたが、この処理を使うと、より視覚的に半径を設定してやる事が出来ます。

ではイベント内容を見てみます。

f:id:vobo:20170717225243g:plain

 

 

 

…何いってんだこいつ?

          /     \
     /   ⌒  ⌒ \   
   /    ()  () \
    |   、" ゙)(__人__)"  )    ___________
   \      。` ⌒゚:j´ ,/ j゙~~| | |             |
__/          \  |__| | |             |
| | /   ,              \n||  | |             |
| | /   /         r.  ( こ) | |             |
| | | ⌒ ーnnn        |\ (⊆ソ .|_|___________|
 ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二  _|_|__|_

 

となった方もいらっしゃるかもしれません…

ですが、寧ろこのイベントの為にこの回を作ったといっても過言ではありません!

しばし辛抱です。

 

まず、このイベントの為に二つの変数を追加しました。

 

・変数(アークタンジェントθ)…中心点から回転オブジェクトを結ぶ直線への角度を代入します

・変数(cosθ)…円の角度θに対するcosの数字を代入します。

 

次に、このイベントを理解する為に、次の二つのポイントを抑えましょう

 

・斜辺θの長さを計算する時は、底辺÷cosθで計算出来る

*底辺の長さ=cosθ×半径(斜辺の長さ) で計算しましたね!

→斜辺の長さ=底辺の長さ÷cosθ   という、単純な方程式の考え方です

 

・アークタンジェントθとは、底辺の長さと縦の長さから、角度を求める関数です

 

f:id:vobo:20170718073447g:plain

図で見ると、赤の線の長さ(回転オブジェクトと中心点のY軸ピクセル差異)と緑の線の長さ(回転オブジェクトと中心点のX軸ピクセル差異)を渡してやる事で、紫の線(円の半径)に生じる角度を計算してくれます。

 

X軸、Y軸それぞれの座標距離を求めるには、片方から片方のX位置、Y位置を引いてやればOKです。

f:id:vobo:20170718073935g:plain

「特別」→「サインおよびコサイン」→「y/xのアークタンジェント」を選びましょう。

f:id:vobo:20170718074219g:plain

こんな感じで、Y軸入力部分、X軸入力部分それぞれに、回転オブジェクトのY座標から中心点オブジェクトのY座標を減算してください。

 こうする事で、イベント行1行目で変数(アークタンジェントθ)には、中心点とオブジェクトの角度が入力された状態になりました。

 

次にイベント2行目を見てみましょう

ここでは後のイベントを分かりやすくする為、一度コサインの値を変数に格納しています。

コサインを計算する為には、角度が必要でしたね。今回必要な角度は、変数(アークタンジェントθ)に格納してありますから、

cos(変数(アークタンジェントθ) )と入力してやる事で、角度θのCOS(斜辺に対する長さの比率)が計算出来ました!

3行目でいよいよ斜辺の長さを計算します。

f:id:vobo:20170717225243g:plain

 3行目では、先述の、「X軸の距離=底辺の長さ」を「cosθ(比率)」で割り算してやる事で、斜辺の長さを計算。

その結果を変数(円の半径(斜辺の長さ) )に代入しています。

さあ、これでようやく、適当に設置したオブジェクトと中心点の角度、半径を自動計算出来ました。後は通常通りの処理が行われているだけです。

f:id:vobo:20170718075636g:plain

動いた!ハッピー!!

 

という事で、見た目の距離を半径として円を描くイベントを組む事が出来ました。

半径が長くなればなる程見た目の回転スピードは速くなりますので、速度の調整は必要ですが、この組み方をすれば、

「半径の異なる同心円を描くオブジェクトが大量に必要」というシチュエーションに役立つ。かもしれない…

 

 

何よりも、今回ご説明したアークタンジェント(愛称、あーたん♪)関数は、自機狙い弾や、プレーヤーのいる方向に回転し続けるオブジェクト、などのイベントに非常に応用が利く関数です。

少しでも理解の助けになっていれば幸いです。

 

 

 

 

長くなりましたが、4回に渡る三角関数講座もようやく終了です。

拙い説明だったと思いますが、最後まで読んでくださった方はありがとう御座います。

 …ところで、一つ気づきませんでしたか?

 

ちょっとだけ三角関数の事を好きになっていた事に

f:id:vobo:20170718082302g:plain

だがタンジェント。お前は駄目だ。