#author("2019-06-05T14:03:34+09:00","default:qua","qua")
#navi(Processing/4.クラスの利用)
* 4-2 引数付きコンストラクタ [#c6a2192e]
#author("2019-06-05T14:07:10+09:00","default:qua","qua")

前の章の例では、すべてのキャラクタが同じ色であった。new Monsterで作成するときに、
個別に色を設定できるようにしてみよう。それには、Monster( int cl )のようにコンストラクタに引数を取らせる。m=new Monster( color( 240, 0, 0 ) )のように引数に色を指定して
実体を作成すると、コンストラクタの最後の行c=clでプロパティm.cにこの色が設定される。

 class Monster{
   float x, y, dx, dy, d;
   int c;
   Monster( int cl ){
     x = -1;
     y = 0;
     dx = 0;
     dy = 0;
     d = 1;
     c = cl;
   }
   void move(){
     fill( c );
     rect( x, y, 40, 60 );
     fill( 255 );
     ellipse( x + 15, y + 20, 10, 15 );
     ellipse( x + 25, y + 20, 10, 15 );
     fill( 0 );
     ellipse( x + 15 + dx * d, y + 20 + dy * d, 5, 5 );
     ellipse( x + 25 + dx * d, y + 20 + dy * d, 5, 5 );
     x = x + dx;
     y = y + dy;
     if( x<0 || x>width || y<0 || y>height ){
        x = random( 10, width-10 );
        y = random( 10, height-10 );
        switch( int(random(4) ) ){
          case 0:  dx =  0; dy =  2; break;
          case 1:  dx =  0; dy = -2; break;
          case 2:  dx =  2; dy =  0; break;
          default: dx = -2; dy =  0; break;
        }
     }
     if( frameCount % 60 == 0 ) d = 1;
     if( frameCount % 60 == 40 ) d = -1;
   }
 }


このように変更すると、以前のスケッチのようにm=new Monster()ではエラーになってしまう。そのような場合に、元のように青色にするということもできる。
 class Monster{
   float x, y, dx, dy, d;
   int c;
   Monster( int cl ){
     x = -1;
     y = 0;
     dx = 0;
     dy = 0;
     d = 1;
     c = cl;
   }
   Monster(){
     this( #0000f0 );
   }
   void move(){
    ...
   }
 }

ここで、
 Monster(){
   this( #0000f0 );
 }
の部分が引数なしでnew Monster()を実行した場合の処理である。ここには、this( #0000f0 )と書かれており、Monster( #0000f0 )と同じ処理を行うことを意味する。


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS