第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元) 2002年度ゲームプログラミング ゲームプログラミング 第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
物体を動かすしくみ 少しずつ座標をずらして表示すると、 動いているように見える 座標をずらして表示する為に 変数を使う。 2002年度ゲームプログラミング 物体を動かすしくみ 少しずつ座標をずらして表示すると、 動いているように見える 座標をずらして表示する為に 変数を使う。
変数(1) 数値を入れておくための箱 整数(int)、少数(float,double)、 文字列(char)などの種類(型)がある。 2002年度ゲームプログラミング 変数(1) 数値を入れておくための箱 整数(int)、少数(float,double)、 文字列(char)などの種類(型)がある。 使用する前に型の宣言が必要 int x; (整数型の変数xの宣言) 宣言は関数の最初に(javaと違う点)
変数(2) 変数の数値を「値」と呼ぶ 値の入れかた y = 100; などのように、= の右側に入れる数値を書く。 2002年度ゲームプログラミング 変数(2) 変数の数値を「値」と呼ぶ 値の入れかた y = 100; などのように、= の右側に入れる数値を書く。 型の宣言と値の設定を初期値を同時に行う こともできる int y = 100; 初めて使う前に値(初期値)を入れておこう
変数(3) 値の使い方 関数の引数に sp_set ( sp , 0 , 100 , y , 1 ); 式の右辺に 2002年度ゲームプログラミング 変数(3) 値の使い方 関数の引数に sp_set ( sp , 0 , 100 , y , 1 ); 式の右辺に num = y ; (y の値をnumに入れる) 条件に if ( y < 0 ) (もしy が0未満なら)
1、ボールを動かそう set_spの y 座標を変数 y を使って指定 whileの繰り返し(ループ)の中で y の値を少しずつ変えていく 2002年度ゲームプログラミング 1、ボールを動かそう set_spの y 座標を変数 y を使って指定 whileの繰り返し(ループ)の中で y の値を少しずつ変えていく y = y + 1 ; (yに1を足す) 関数の最初で y を宣言することが必要
残像を消そう ボールの残像が出る理由 →前に描いたボールが残っている ボールを描く前に毎回画面を 真っ黒に塗りつぶそう 2002年度ゲームプログラミング 残像を消そう ボールの残像が出る理由 →前に描いたボールが残っている ボールを描く前に毎回画面を 真っ黒に塗りつぶそう 黒いbitmapを表示して塗りつぶす
真っ黒なビットマップの表示 前回の雛型以外の4行(ボール表示の準備と、ボール表示)を流用して、 2002年度ゲームプログラミング 真っ黒なビットマップの表示 前回の雛型以外の4行(ボール表示の準備と、ボール表示)を流用して、 真っ黒なbitmap(gp2.bmp)を表示させよう。 int bg; bg=load_bmp("gp2.bmp",,,); def_char(bg,,,); sp_set(bg,,,);
2002年度ゲームプログラミング ひとやすみ 皆が残像なくボールを動かせるように なるまで、しばし休憩。 元気のある人は先に進んでみましょう
反復運動(1) 上から下へ、下から上へを繰り返す。 下向き(↓)に動かす処理 y = y + 1; 上向き(↑)に動かす処理 2002年度ゲームプログラミング 反復運動(1) 上から下へ、下から上へを繰り返す。 下向き(↓)に動かす処理 y = y + 1; 上向き(↑)に動かす処理 y = y - 1; y = y + (-1); とも書ける
反復運動(2) y が変化する量も変数にしてみよう。 int dy; yが変化する量 y = y + dy ; yにdyを足す 2002年度ゲームプログラミング 反復運動(2) y が変化する量も変数にしてみよう。 int dy; yが変化する量 y = y + dy ; yにdyを足す dy が1の時、yが1づつ増える →ボールが下に動く dy が-1の時、yが1づつ減る →ボールが上に動く
反復運動(3) ボールが下まで来たら、dyの符号を反転 dy = -dy; (1だったら-1になる) ボールが上まで来たら、dyの符号を反転 2002年度ゲームプログラミング 反復運動(3) ボールが下まで来たら、dyの符号を反転 dy = -dy; (1だったら-1になる) ボールが上まで来たら、dyの符号を反転 dy = -dy; (-1だったら1になる) 「○○だったら××する」という処理 にはif文を使う
if 文(条件分岐) 「条件」を満たす時のみ「命令」を実行する。 if (条件) 命令; 実行する「命令」が複数ある場合は{}でくくる。 2002年度ゲームプログラミング if 文(条件分岐) 「条件」を満たす時のみ「命令」を実行する。 if (条件) 命令; 実行する「命令」が複数ある場合は{}でくくる。 if (条件){ 命令1; 命令2; }
様々な条件 if(A==B) AがBと等しい if(A>B) AがBより大きい if(A<B) AがBより小さい 2002年度ゲームプログラミング 様々な条件 if(A==B) AがBと等しい if(A>B) AがBより大きい if(A<B) AがBより小さい if(A>=B) AがB以上 if(A<=B) AがB以下 if(A!=B) AとBが等しくない if(A) Aが0以外
2、ボールを反復させよう 以下のような構造になります while ( … ) { y = y + dy ; 2002年度ゲームプログラミング 2、ボールを反復させよう 以下のような構造になります while ( … ) { y = y + dy ; yが0以下なら dy = - dy; yが448以上なら dy = - dy; ボール表示; }
3、跳ね返るとスピードUP yの変化の量を増やすとスピードUP →dyの絶対値を大きくしていく 跳ね返った時のみ 2002年度ゲームプログラミング 3、跳ね返るとスピードUP yの変化の量を増やすとスピードUP →dyの絶対値を大きくしていく 跳ね返った時のみ →if文{}の中にスピードUPの命令を足す 上で跳ね返った後のdyは正(+) →さらに1足す 下で跳ね返った後のdyは負(ー) →さらに1引く
4、背景を描こう gp2.bmpの中身を書き換えてみよう ボールの四隅が黒く表示されてしまう →黒い部分を表示しないようにしよう 2002年度ゲームプログラミング 4、背景を描こう gp2.bmpの中身を書き換えてみよう ボールの四隅が黒く表示されてしまう →黒い部分を表示しないようにしよう 黒を透明にする命令 def_trans(sp,0);
5、床で弾んでいるように 引力を表現 常に下向きに加速する → dy = dy + 1; 跳ね返り係数を表現 2002年度ゲームプログラミング 5、床で弾んでいるように 引力を表現 常に下向きに加速する → dy = dy + 1; 跳ね返り係数を表現 跳ね返った瞬間にスピードが減少する → 跳ね返りのif文で dy を遅く