第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元) 2005年度ゲームプログラミング ゲームプログラミング 第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
新しいプロジェクトを作ろう これからは課題ごとにプロジェクトを作って作業します 2005年度ゲームプログラミング 新しいプロジェクトを作ろう これからは課題ごとにプロジェクトを作って作業します 1、コンパイル支援ツールの「file→newproject」で新しいプロジェクトを作成します。 2、srcにプログラムを、resに画像ファイルを入れます。(testプロジェクトからコピー) 3、srcの中の*.javaファイルは全てコンパイルの対象になるので、game.javaのバックアップを別識別子または別フォルダで取れば、game.javaのみを変えて進める事も出来ます。
プログラムの流れ <基本的な流れ> gameCanvas() <割り込み処理> ↓ keyPressed() 2005年度ゲームプログラミング プログラムの流れ <基本的な流れ> gameCanvas() ↓ updateGame() ←←← ↓ ↑ drawGame() ↑ 100ミリ秒待つ →→→↑ <割り込み処理> keyPressed()
物体を動かすしくみ 少しずつ座標をずらして表示すると、 動いているように見える 座標をずらして表示する為に 変数を使う。 2005年度ゲームプログラミング 物体を動かすしくみ 少しずつ座標をずらして表示すると、 動いているように見える 座標をずらして表示する為に 変数を使う。
変数(1) 数値を入れておくための箱 整数(int)、少数(float,double)、 文字列(char)などの種類(型)がある。 2005年度ゲームプログラミング 変数(1) 数値を入れておくための箱 整数(int)、少数(float,double)、 文字列(char)などの種類(型)がある。 使用する前に型の宣言が必要 int x; (整数型の変数xの宣言) 宣言の場所によって、影響範囲が変わる。
変数(2) 変数の数値を「値」と呼ぶ 値の入れかた y = 100; などのように、= の右側に入れる数値を書く。 2005年度ゲームプログラミング 変数(2) 変数の数値を「値」と呼ぶ 値の入れかた y = 100; などのように、= の右側に入れる数値を書く。 型の宣言と値の設定を初期値を同時に行う こともできる int y = 100; 初めて使う前に値(初期値)を入れておこう
変数(3) 値の使い方 関数の引数に gc.drawImage ( 0, 50 , y ); 式の右辺に 2005年度ゲームプログラミング 変数(3) 値の使い方 関数の引数に gc.drawImage ( 0, 50 , y ); 式の右辺に num = y ; (y の値をnumに入れる) 条件に if ( y < 0 ) (もしy が0未満なら)
1、ボールを動かそう drawImageの y 座標を変数 y を使って指定 updateGame()の中で y の値を少しずつ変えていく 2005年度ゲームプログラミング 1、ボールを動かそう drawImageの y 座標を変数 y を使って指定 updateGame()の中で y の値を少しずつ変えていく y = y + 1 ; (yに1を足す) クラスの最初で y を宣言することが必要
残像を消そう ボールの残像が出る理由 →前に描いたボールが残っている ボールを描く前に毎回画面を 真っ白に塗りつぶそう 2005年度ゲームプログラミング 残像を消そう ボールの残像が出る理由 →前に描いたボールが残っている ボールを描く前に毎回画面を 真っ白に塗りつぶそう 白い四角形を表示して塗りつぶす
白い四角形の表示 色指定。 gc.setColor(0xFFFFFF);//白 塗りつぶし四角形 gc.fillRect(x,y,w,h); 2005年度ゲームプログラミング 白い四角形の表示 色指定。 gc.setColor(0xFFFFFF);//白 塗りつぶし四角形 gc.fillRect(x,y,w,h); (x,y)左上の座標、wは幅、hは高さ gc.fillRect(0,0,144,147); (画面一杯の四角形)
反復運動(1) 上から下へ、下から上へを繰り返す。 下向き(↓)に動かす処理 y = y + 1; 上向き(↑)に動かす処理 2005年度ゲームプログラミング 反復運動(1) 上から下へ、下から上へを繰り返す。 下向き(↓)に動かす処理 y = y + 1; 上向き(↑)に動かす処理 y = y - 1; y = y + (-1); とも書ける
反復運動(2) y が変化する量も変数にしてみよう。 int dy; yが変化する量 y = y + dy ; yにdyを足す 2005年度ゲームプログラミング 反復運動(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の符号を反転 2005年度ゲームプログラミング 反復運動(3) ボールが下まで来たら、dyの符号を反転 dy = -dy; (1だったら-1になる) ボールが上まで来たら、dyの符号を反転 dy = -dy; (-1だったら1になる) 「○○だったら××する」という処理 にはif文を使う
if 文(条件分岐) 「条件」を満たす時のみ「命令」を実行する。 if (条件) 命令; 実行する「命令」が複数ある場合は{}でくくる。 2005年度ゲームプログラミング if 文(条件分岐) 「条件」を満たす時のみ「命令」を実行する。 if (条件) 命令; 実行する「命令」が複数ある場合は{}でくくる。 if (条件){ 命令1; 命令2; }
様々な条件 if(A==B) AがBと等しい if(A>B) AがBより大きい if(A<B) AがBより小さい 2005年度ゲームプログラミング 様々な条件 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、ボールを反復させよう 以下のような構造になります updateGame() { y = y + dy ; 2005年度ゲームプログラミング 2、ボールを反復させよう 以下のような構造になります updateGame() { y = y + dy ; yが0以下なら dy = - dy; yが132以上なら dy = - dy; }
3、跳ね返るとスピードUP yの変化の量を増やすとスピードUP →dyの絶対値を大きくしていく 跳ね返った時のみ 2005年度ゲームプログラミング 3、跳ね返るとスピードUP yの変化の量を増やすとスピードUP →dyの絶対値を大きくしていく 跳ね返った時のみ →if文{}の中にスピードUPの命令を足す 上で跳ね返った後のdyは正(+) →さらに1足す 下で跳ね返った後のdyは負(ー) →さらに1引く
4、背景を描こう 白く塗りつぶす代わりに画面と同じサイズの画像を表示してみよう。 画面サイズは縦147、横144 2005年度ゲームプログラミング 4、背景を描こう 白く塗りつぶす代わりに画面と同じサイズの画像を表示してみよう。 画面サイズは縦147、横144 表示の方法は、ボールの表示と同じ →宣言、読み込み、表示の3ステップ
5、床で弾んでいるように 引力を表現 常に下向きに加速する → dy = dy + 1; 跳ね返り係数を表現 2005年度ゲームプログラミング 5、床で弾んでいるように 引力を表現 常に下向きに加速する → dy = dy + 1; 跳ね返り係数を表現 跳ね返った瞬間にスピードが減少する → 跳ね返りのif文で dy を遅く