前の章の例では、すべてのキャラクタが同じ色であった。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 )と同じ処理を行うことを意味する。