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