自作ゲームの大福島

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

スポンサードリンク

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

さあ、今回はCF2.5での具体的なイベント作成の解説です。

f:id:vobo:20170715012923g:plain

f:id:vobo:20170715013545g:plain

使用するオブジェクト変数と意味は以下の通りです。

 

・中心点のX座標…その名の通り円運動の中心となるX座標を定義します。

・中心点のY座標…円運動の中心となるY座標を定義します。

・円の半径(斜辺の長さ)…中心点から回転オブジェクトまでの距離を定義します。

例えば100を代入すれば、半径100ピクセルの等心円を描きます

・角度θ…中心点から回転オブジェクトまでの直線(半径)を繋ぐ角度です。

0からスタートし、360°まで増加させます

・回転速度…1フレームに計算する角度の数です。例えば10を代入した場合、1フレーム目は0°の位置、2フレーム目は10°の時のオブジェクトの座標を計算します。

当然ですが、この数字を上げる程、見た目の回転の早くなります。

 

ではイベント解説です。

前提として、変数(円の半径)に100、変数(回転速度)に1を代入します。

 

「フレームが開始」

・まずは円運動の中心となる座標を定義します。その為に変数(中心点のX(Y)座標)に、中心点オブジェクトの位置を代入します。

 

「常に実行」

・ここで半径に対するsin、cosを使って回転オブジェクトの座標を計算していきます。

前回の講座内容より、半径(斜辺の長さ)にcosをかけた物がオブジェクトのX座標、

半径(斜辺の長さ)にsinをかけた物がオブジェクトのY座標であるという事が分かりましたので、1フレーム毎に位置を変更していくわけです。

ちなみに、中心点の○座標に移動距離を加算する形をとっていますが、この計算を入れないと、

 

f:id:vobo:20170717124830g:plain

このように、CF2.5の画面左上端を中心とした円運動に変更されてしまいますので注意が必要です。

CF2.5では左上端が(Y,X)=(0,0)だからです。

 

 そして最後に、次のフレームで計算する角度を変更してやるイベントを組みます。

今回の場合は、

変数(角度θ)に変数(回転速度=5)を追加してやります。

こうする事で、毎フレーム5°ずつ回転するオブジェクトの完成です!

いかがでしょう。動きましたでしょうか?

それでは角度の計算に関して補足です。

 

角度θを360°周期で0に戻すには?

このプログラムでは、問題なく円運動は出来るものの、角度θの変数を見てみると、

360°を超えても400~500と無限に増えていってしまっているのが分かると思います。

永遠に加算し続けるわけですからそらそうですよね。

これをきっちり360°に到達したら再び0°に戻すには以下のように組んで見て下さい。

f:id:vobo:20170717171423g:plain

f:id:vobo:20170717171629g:plain

ポイントは『mod』という関数です。

数字①mod数字② と記述する事で、「数字①を数字②で割った時の余りを返す」関数です。

 重要なのは、

数字①より数字②が大きい場合は計算されない

 という点です。

つまり今回の場合は、角度θが0からスタートしますから、

 当然0を360で割る事が出来ず、mod360の部分は無視され、回転速度5が加算されるのみとなります。

で、次のフレームでどう計算されるかというと、

『5mod360+5』という公式になります。

今回も5を360で割れませんから、無視。『5+5』というシンプルな公式となり、次のフレームでの角度θの値は10となるわけです。

もうお察しの通り、360°に達するまで、5ずつ角度が増えていき、円運動が一周する360に達した瞬間、360÷360=余り0となり、再び0°からの計算に戻してくれます。

 

このmod関数、地味に便利です!

応用として、例えばタイマーを用いずに、変数で~秒毎に△△する、というイベントを組むときに、

 

・常に実行  変数Aを 『変数Amod100+1』 に変更

・変数Aが100になった時  ○○○を発射

 

このような形にしてやると、たった2行で変数タイマーの完成です!!

わざわざ「変数Aが100になったらイベントを行って、変数Aを一旦0に戻して…」

とまだるっこしい計算をする必要が無くなります。

神ってる!mod先輩神ってる!!

 

 

長くなりましたが、以上が円運動イベントの基本形の解説で御座いました。

まだ気力があれば、次回は円運動の発展系イベントの組み方解説をやってみようと思います。