4-2 引数付きコンストラクタ

前の章の例では、すべてのキャラクタが同じ色であった。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