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

yに1を足す