processingでのclassの使い方備忘録

1.classとは

・変数と関数が合体した奴

・オブジェクト化(インスタンス化)が必要

・配列にすることもできる

色々あるけど文じゃ説明できないのでとりあえずソース書く

<パックマンを描画する:その1>

class pacman{//クラスを作るよ!
  int x = width/2;
  int y = height/2;
  int size = 50;

  void drawpacman(){//パックマンを描画する関数
    arc(x,y,size,size,radians(45),radians(315));
  }
}

pacman pac1 = new pacman();//オブジェクト化
size(400,400);
pac1.drawpacman();

<実行結果>

f:id:Maryo:20201014225259p:plain

まあこんな感じでクラスは作れる。
流れとしては、

クラスを定義


オブジェクト化


クラスの外部からクラス内の関数を呼び出して使う

って感じ。
ただ、こんな処理にクラスを使う意味がないよね。
そこで、クラスにおいて重要な役割を担うやつを紹介しよう。

2.コンストラク

コンストラクタってのは何かっていうと、
オブジェクト化するときに実行される関数みたいなやつのこと。
記述方法は
クラス名(){}
って感じ。めっちゃ簡単だね!
で、基本的な使い方としては、
引数として与えられた値をクラス内の変数に受け渡すって感じ。
まあまたソース書いて説明しようかね。

<パックマンを描画する:その2>

class pacman{
  int x,y,size;
  
  pacman(int x0,int y0,int size0){//コンストラクタ
    x = x0;
    y = y0;
    size = size0;
  }
  
  void drawpacman(){
    arc(x,y,size,size,radians(45),radians(315));
  }
}

pacman pac1 = new pacman(60,80,100);//引数を指定
size(400,400);
pac1.drawpacman();

<実行結果>

f:id:Maryo:20201014231538p:plain

これでパックマンの位置とサイズを好きに指定できるようになった。
こんな風にオブジェクト化するときに引数を指定することで、同じクラスで違った挙動をさせることができる
でもこの程度の処理なら関数単体に引数を与えてやればできる。
というわけで次は、クラスでなきゃできないことをやってみよう。

3.いくつもオブジェクトを作る

今回はタイトルに書いてある通り、オブジェクトをいくつか作ってみよう。

<パックマンを描画する:その3>

class pacman{
  int x,y,size;
  
  pacman(int x0,int y0,int size0){
    x = x0;
    y = y0;
    size = size0;
  }
  
  void drawpacman(){
    arc(x,y,size,size,radians(45),radians(315));
  }
}

pacman pac1 = new pacman(60,80,100);
pacman pac2 = new pacman(280,100,50);
pacman pac3 = new pacman(300,300,200);
size(400,400);
pac1.drawpacman();
pac2.drawpacman();
pac3.drawpacman();

<実行結果>

f:id:Maryo:20201014233406p:plain

こんな感じで、それぞれ条件の違う3体のパックマンを召喚してみた。
今回、クラス内のソースは全く変えていない。
クラスを定義することで、微妙に条件が違う類似品大量生産できるというわけだ。
いうなれば、クラスというのは「寸法が記入されていない設計図」ってところかな。(いい例えかは分からんけど)
その設計図に寸法を入れて、型番を決めるという作業がオブジェクト化になるかと。
でもいちいち引数指定してオブジェクト化して…っていう作業は、数が増えてくるとめんどくさい。
配列みたいに扱えたら楽なのになあ…って思ったそこの君!できるんですよこれ。

4.オブジェクトの配列

というわけでこれが最終章。オブジェクトを配列として扱うよ。

<パックマンを描画する:その4>

class pacman{
  float x,y,size;//random()を使うためにfloat型にした
  
  pacman(float x0,float y0,float size0){
    x = x0;
    y = y0;
    size = size0;
  }
  
  void drawpacman(){
    arc(x,y,size,size,radians(45),radians(315),PIE);//見やすくするため輪郭をつけた
  }
}

pacman[] pacs = new pacman[100];//配列の宣言
size(400,400);
for(int i = 0;i < pacs.length;i++){
  pacs[i] = new pacman(random(20,380),random(0,400),random(10,50));//各オブジェクトに引数をランダムに指定
  pacs[i].drawpacman();//描画
}

<実行結果>

f:id:Maryo:20201015000920p:plain

うわぁきも。
以上、クラスを使うとこんな感じで大量生産できますよっていうお話でした。
本当はクラスはもっと奥が深いんですが、継承とかよくわからんのでやりません。
もしかしたら間違ってるところとかあるかもしれないですが大目に見ていただけるとありがたいです…。
因みにこのパックマンネタは公式のprocessingの教科書に載ってたからパクりましたすみません。
ソースは完全オリジナルなので許してください。
この備忘録がどっかの誰かの役に立てばいいなと思います。それでは。