>> ブロック崩しプログラミング入門トップに戻る
今回はボールの移動制御について説明します。
BALLクラスの変数dx,dyを使います。
これはXとY方向それぞれの移動量を表します。
まずコンストラクタで、dxは3、dyは-3を代入しています。
つまり、最初は右方向&上方向にボールが移動するということですね。
次にMove関数を見て下さい。
移動に関することだけ説明します。
サウンドフラグについては、別途説明します。
まず、x座標とy座標に移動量を足しています。
これだけでもボールは動きますが、ボールは壁に当たったら跳ね返す必要があります。
その制御をしているのが、下のif文です。
if文の条件式については、画面のはみ出し制御そのままなので説明不要ですね。
分からない人はゲームプログラミング入門の、キャラの移動制御を参照して下さい。
まず一つ目のif文は左側の壁に当たったときの処理です。
if文の中では移動量dxにー1をかけています。
左側の壁に当たるということは、ボールが左に移動してきてぶつかったということです。
そのときの移動量は当然マイナスになるわけです。
壁に当たったら逆に跳ね返ることになりますから、-1をかけてやります。
こうすることで、移動量がプラスになり、右に跳ね返ってくれるようになります。
他のif文も同じです。
上でも右でも、壁に当たれば逆に跳ね返ることになるので、-1をかけてあげて、
移動量の符号を逆転させているんですね。
下の壁の場合は当然ゲームオーバーになるので、跳ね返り処理は行わず、
endflagをtrueにしています。
これで壁の跳ね返り移動が出来るようになりました。
なお、講座の最初に説明したとおり、描画関数やこの移動関数は、
下記のAll関数というものでまとめられて実行しています。
BALLクラスもendflagの値を毎回返しています。
ゲームオーバーになったらtrueにするようにしているので、
この戻り値を受け取る親クラスのCONTROLクラスによって、プログラムが終了するようにしています。
CONTROLクラスの説明は後ほど行います。
今回の説明は以上です。
次回はブロックの表示について説明します。
>> 【ブロックの表示】に進む
>> ブロック崩しプログラミング入門トップに戻る
ボールの移動制御
BALLクラスの変数dx,dyを使います。
これはXとY方向それぞれの移動量を表します。
まずコンストラクタで、dxは3、dyは-3を代入しています。
つまり、最初は右方向&上方向にボールが移動するということですね。
次にMove関数を見て下さい。
void BALL::Move(){ //まず音はOFFにしとく soundflag=false; //移動量を加算 x+=dx; y+=dy; //画面はみ出し処理 if(x<width/2){ x=width/2; dx*=-1; //当たったのでサウンドフラグを立てる soundflag=true; } if(x>WIDTH-width/2){ x=WIDTH-width/2; dx*=-1; //当たったのでサウンドフラグを立てる soundflag=true; } if(y<height/2){ y=height/2; dy*=-1; //当たったのでサウンドフラグを立てる soundflag=true; } //下にはみ出たらゲームオーバー if(y>HEIGHT){ endflag=true; } }
移動に関することだけ説明します。
サウンドフラグについては、別途説明します。
まず、x座標とy座標に移動量を足しています。
これだけでもボールは動きますが、ボールは壁に当たったら跳ね返す必要があります。
その制御をしているのが、下のif文です。
if文の条件式については、画面のはみ出し制御そのままなので説明不要ですね。
分からない人はゲームプログラミング入門の、キャラの移動制御を参照して下さい。
まず一つ目のif文は左側の壁に当たったときの処理です。
if文の中では移動量dxにー1をかけています。
左側の壁に当たるということは、ボールが左に移動してきてぶつかったということです。
そのときの移動量は当然マイナスになるわけです。
壁に当たったら逆に跳ね返ることになりますから、-1をかけてやります。
こうすることで、移動量がプラスになり、右に跳ね返ってくれるようになります。
他のif文も同じです。
上でも右でも、壁に当たれば逆に跳ね返ることになるので、-1をかけてあげて、
移動量の符号を逆転させているんですね。
下の壁の場合は当然ゲームオーバーになるので、跳ね返り処理は行わず、
endflagをtrueにしています。
これで壁の跳ね返り移動が出来るようになりました。
なお、講座の最初に説明したとおり、描画関数やこの移動関数は、
下記のAll関数というものでまとめられて実行しています。
bool BALL::All() { Move(); //描画処理 Draw(); return endflag; }
BALLクラスもendflagの値を毎回返しています。
ゲームオーバーになったらtrueにするようにしているので、
この戻り値を受け取る親クラスのCONTROLクラスによって、プログラムが終了するようにしています。
CONTROLクラスの説明は後ほど行います。
今回の説明は以上です。
次回はブロックの表示について説明します。
>> 【ブロックの表示】に進む
>> ブロック崩しプログラミング入門トップに戻る