連射機能のついたシューティング
基本の型
void setup(){ size(600, 400);}void draw(){ background(0);}弾を1つ画面の下の方に表示して上に飛ばす
// Bullet(銃弾)のx、yで「bx」「by」float bx01 = 300;float by01 = 300;void setup(){ size(600, 400);}void draw(){ background(0);
// 弾1つ目 by01 = by01 - 1; rect(bx01, by01, 10, 10);}球を2つにする
float bx01 = 300;float by01 = 300;float bx02 = 300;float by02 = 320;void setup(){ size(600, 400);}void draw(){ background(0);
// 弾1つ目 by01 = by01 - 1; rect(bx01, by01, 10, 10);
// 弾2つ目 by02 = by02 - 1; rect(bx02, by02, 10, 10);}弾を3つにする
float bx01 = 300;float by01 = 300;float bx02 = 300;float by02 = 320;float bx03 = 300;float by03 = 340;void setup(){ size(600, 400);}void draw(){ background(0);
// 弾1つ目 by01 = by01 - 1; rect(bx01, by01, 10, 10);
// 弾2つ目 by02 = by02 - 1; rect(bx02, by02, 10, 10);
// 弾3つ目 by03 = by03 - 1; rect(bx03, by03, 10, 10);}弾を4つ
めんどくさいよね、わかります。
配列を使おう
配列を使うと、1つの変数の中に複数の情報を入れることができるぞ
// この例では5個の情報が入っているfloat[] bx = new float[5];float[] by = new float[5];float[] 変数名 = new float[個数]
これが配列の定義方法だ。
定義された配列は、
bx[0] = 100;bx[1] = 200;bx[2] = 300;bx[3] = 400;bx[4] = 500;という具合に、0〜4の番号を[]の中に指定してあげることで、通常の変数と同じように扱えるぞ。
配列を使って、1個目の球だけ発射
float[] bx = new float[5];float[] by = new float[5];void setup(){ size(600, 400);
// 弾1つ目の最初の位置 bx[0] = 300; by[0] = 300;}void draw(){ background(0);
by[0] = by[0] - 1; rect(bx[0], by[0], 10, 10);}1つ目なので番号は「0」であることに注目してくれ。
配列を使って、3つの球を発射
// Bullet(銃弾)のx、yで「bx」「by」float[] bx = new float[5];float[] by = new float[5];void setup(){ size(600, 400);
// 弾1つ目の最初の位置 bx[0] = 300; by[0] = 300;
bx[1] = 300; by[1] = 320;
bx[2] = 300; by[2] = 340;}void draw(){ background(0);
by[0] = by[0] - 1; rect(bx[0], by[0], 10, 10);
by[1] = by[1] - 1; rect(bx[1], by[1], 10, 10);
by[2] = by[2] - 1; rect(bx[2], by[2], 10, 10);}「0〜2」の3つの番号を使ったぞ。
配列を使って、5つ全ての球を発射
はい、まだめんどくさいよね。わかります。
繰り返し処理を使おう
繰り返し処理forはわかるかな。
void draw(){ background(0); for(int i=0; i<5; i++){ println(i); }}for(int i=0; i<5; i++){
}
これは「{}」ブロックの中を5回繰り返すという意味だ。 そして、ブロックの中では変数「i」が使え、「0」からはじまり、1つ繰り返すたびに「1」増えるんだ。
この性質を使って、配列と組み合わせよう。
繰り返し処理を使って弾全てを動かそう
float[] bx = new float[5];float[] by = new float[5];void setup(){ size(600, 400);
// 弾の初期位置を乱数で for(int i=0; i<5; i++){ bx[i] = random(400); by[i] = random(400); }}void draw(){ background(0);
for(int i=0; i<5; i++){ by[i] = by[i] - 1; rect(bx[i], by[i], 10, 10); }}だいぶすっきりしたね。
連射しよう
// 100個にしたfloat[] bx = new float[100];float[] by = new float[100];void setup(){ size(600, 400);}void draw(){ background(0);
for(int i=0; i<100; i++){ by[i] = by[i] - 1; rect(bx[i], by[i], 10, 10); }}
// マウスがクリックされた時void mousePressed(){ for(int i=0; i<100; i++){ // 0以下の番号を探す if(by[i] <= 0){ // 番号をみつけたら、マウスの座標を与える bx[i] = mouseX; by[i] = mouseY;
// breakして、繰り返し処理を終了させる。 break; } }}やってみよう
宇宙空間を作ろう。 100個の星屑が、右に流れるように。