レッスン 18

便利な関数を使ってみよう

ゲームをつくるために役立ちそうな関数を紹介します

チャプター1このレッスンのゴール

このレッスンで完成させるものを確認しよう

チャプター2円形を表示しよう

2. 1 写してみよう

var x = 200;
var y = 200;
var radius = 12;

//最初に一回だけ呼び出される初期設定
function setup() {
  createCanvas(400, 400);
  ellipseMode(RADIUS);
}

//繰り返し呼び出される処理
function draw() {
  background(220);

  fill(255, 0, 0);

  ellipse(x, y, radius, radius);
}

円がキャンバスの中心に描かれて入ればOKです。

チャプター3マウスホバーと連動して大きさ・色を変えてみよう

ここまでの見本42
次に、マウスのX座標が円と重なっているときだけ、円が大きくなるようにします。円の中心から、マウスまでの距離は数式で求めることができます。が、面倒です。p5.jsが既に用意してくれている、「関数」を使いましょう。dist関数です。

3. 1 変更してみよう

   //繰り返し呼び出される処理
   function draw() {
     background(220);
 
-    fill(255, 0, 0);
  
     ellipse(x, y, radius, radius);
   }
   //繰り返し呼び出される処理
   function draw() {
     background(220);
 
+    var d = dist(mouseX, mouseY, x, y);
+    if (d < radius) {
+      radius++;
+      fill(0, 0, 255);
+    } else {
+      fill(255, 0, 0);
+    }
 
     ellipse(x, y, radius, radius);
   }

円とマウスが重なっているときは青、それ以外のときは赤となっていればOKです。

3. 2 コードの解説

dist関数を使って、マウスの位置と円の中心(200,200)の距離を判定しています。円の中心までの距離が、半径の200以内であればfill(0,255,0)そうでなければ(255,0,0)となるような処理となっています。

関数とは

関数とは、これまで多くの場面で利用してきました。今回使用したdist関数以外にも、background()なども関数と言えます。()の中に入るものを引数と言います。

引数は2つ以上のものもあれば、引数のない関数もあります。このコースだけでは紹介仕切れないため、公式のページで、色々な関数を確認してみましょう。

また、関数を通した結果、計算される値を返り値(かえりち)または、戻り値(もどりち)といいます。

dist関数

上記のリファレンスページにも記載がありますが、説明します。2点の距離を求める関数です。

dist(値1,値2,値3,値4)

(値1,値2)を(x1,y1)、(値3,値4)を(x2,y2)としたときの、(x1,y1)と(x2,y2)の距離を返します。

チャプター4半径の大きさに応じて背景の色を変更しよう

ここまでの見本43

このチャプタでは、円の半径の大きさに応じて、背景の色が変更されるプログラムに修正します。
円の半径は12から200、一方で背景の色を白黒はbackgroudの引数を0から255に変更しなければいけません。便利なmap関数を使います。

4. 1 変更しよう

var x = 200;
var y = 200;
var radius = 12;
+ var col;

//最初に一回だけ呼び出される初期設定
function setup() {
  createCanvas(400, 400);
  ellipseMode(RADIUS);
}

//繰り返し呼び出される処理
function draw() {
+  col = map(radius,12,200,0,255);
+  background(col);
  var d = dist(mouseX, mouseY, x, y);
  if (d < radius) {
    radius++;

4. 2 コードの解説

map関数を使って、colにradiusの値を変換して代入しています。そのため、colは次のように変化します。

  • 円の半径が12のとき、黒である0
  • 画面(400×400)にぴったり収まっているとき、白である255

map関数

リファレンスを(英語で)読むのが一番良いですが、説明します。

map(値1,値2,値3,値4,値5)

引数が5個のとき、値1の変化する数字を、値2〜値3の範囲内にあるとき、値4〜値5に変換します。
色の指定をする場合に使い勝手が良いので覚えておきましょう。

チャプター5マウスがクリックされたら初期化されるようにしよう

5. 1 変更しよう

draw関数に、mouseClicked()関数を追加して、処理を書きましょう。

  ellipse(x, y, radius, radius);
}

+ function mouseClicked(){
+   radius = 12;
+ }

コードを変更できたら実行してみましょう。
マウスをクリックしたときに、円の大きさが12に戻っていればOKです。

5. 2 コードの解説

mouseClicked()関数は、引数の必要がない関数の1つです。文字通り、マウスがクリックされた時の1回だけ実行されるコードとなっています。ゲームのリスタートのときなどに使えそうですね。

チャプター6チャレンジしよう

このチャプタで出てきたdist関数とmap関数を身に着けるためのコードにチャレンジしよう。

6. 1 完成形

次の見本を元に、自分でコードを完成させてみよう。

ヒント

  • 小さい円はマウスを追ってくるようにしています
  • 小さい円の緑色はmap関数でマウスのX座標に応じて変化すようにしています
  • 小さい円と大きい丸はdist関数で中心と中心の距離を常に更新し、半径の和より小さくなったとき、バツになるようにしています
    • 見本は小さい円の半径は50、大きい円の半径は100なので、中心と中心の距離が75より大きいか小さいかで条件分岐させています
チャプターを全部クリアしよう!