2008年度ゲームプログラミング ゲームプログラミング 第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元) 2008年度ゲームプログラミング 新しいプロジェクトを作ろう(1) これからは課題ごとにプロジェクトを作って作業 1、開発ツールの「プロジェクト新規作成」で新しいプ ロジェクトを作成 →C:\iDKDoJa5.1\apps\ にプロジェクト名のフォルダができる ※ソースファイル作成のチェックは外す 2、srcにプログラムを、resに画像ファイルを入れる (gptestプロジェクトからコピー) 2008年度ゲームプログラミング 新しいプロジェクトを作ろう(2) 「ADF設定」をクリックして、アプリ名を変えてみよう。 ※ADF設定では、アプリの様々な情報を設定できる ・ハイスコア等のデータ保存領域の設定 ・通信機能のon/off ・バージョン情報 設定した項目がjamファイルに反映される →jamファイルをテキストエディタで開いてみよう ※srcの中の*.javaファイルは全てコンパイルの対 象になる。game.javaのバックアップを別識別子 または別フォルダで取って、game.javaのみを変 えて進める事も可能 2008年度ゲームプログラミング プログラムの流れ <基本的な流れ> initGame () ↓ updateGame() ←←← ↓ ↑ drawGame() ↑ ↓ ↑ 100ミリ秒待つ →→→↑ 2008年度ゲームプログラミング 物体を動かすしくみ 少しずつ座標をずらして表示すると、 動いているように見える 座標をずらして表示する為に 変数を使う。 2008年度ゲームプログラミング 変数(1) 数値を入れておくための箱 整数(int)、少数(float,double)、 文字列(char)などの種類(型)がある。 使用する前に型の宣言が必要 int x; (整数型の変数xの宣言) 宣言の場所によって、影響範囲が変わ る。 2008年度ゲームプログラミング 変数(2) 変数の数値を「値」と呼ぶ 値の入れかた y = 100; などのように、= の右側に入れる数値を書く。 型の宣言と値の設定を初期値を同時に行う こともできる int y = 100; 初めて使う前に値(初期値)を入れておこう 2008年度ゲームプログラミング 変数(3) 値の使い方 関数の引数に gc.drawImage ( 0, 50 , y ); 式の右辺に num = y ; (y の値をnumに入れる) 条件に if ( y < 0 ) (もしy が0未満なら) 2008年度ゲームプログラミング 1、ボールを動かそう drawImageの y 座標を変数 y を使って指定 updateGame()の中で y の値を少しずつ変えていく y = y + 1 ; (yに1を足す) クラスの最初で y を宣言することが必要 2008年度ゲームプログラミング 残像を消そう ボールの残像が出る理由 →前に描いたボールが残っている ボールを描く前に毎回画面を 真っ白に塗りつぶそう 白い四角形を表示して塗りつぶす ※背景を毎回描画することでも解決可能 2008年度ゲームプログラミング 白い四角形の表示 色指定。 gc.setColor(0xFFFFFF);//白 塗りつぶし四角形 gc.fillRect(x,y,w,h); (x,y)左上の座標、wは幅、hは高さ gc.fillRect(0,0,240,240); (画面一杯の四角形) 2008年度ゲームプログラミング 反復運動(1) 上から下へ、下から上へを繰り返す。 下向き(↓)に動かす処理 y = y + 1; 上向き(↑)に動かす処理 y = y - 1; y = y + (-1); とも書ける 2008年度ゲームプログラミング 反復運動(2) y が変化する量も変数にしてみよう。 int dy; yが変化する量 y = y + dy ; yにdyを足す dy が1の時、yが1づつ増える →ボールが下に動く dy が-1の時、yが1づつ減る →ボールが上に動く 2008年度ゲームプログラミング 反復運動(3) ボールが下まで来たら、dyの符号を反転 dy = -dy; (1だったら-1になる) ボールが上まで来たら、dyの符号を反転 dy = -dy; (-1だったら1になる) 「○○だったら××する」という処理 にはif文を使う 2008年度ゲームプログラミング if 文(条件分岐) 「条件」を満たす時のみ「命令」を実行する。 if (条件) 命令; 実行する「命令」が複数ある場合は{}でくくる。 if (条件){ 命令1; 命令2; } 2008年度ゲームプログラミング 様々な条件 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以外 2008年度ゲームプログラミング 条件の複合 ( and と or ) AかつB、という条件は&&で表す(and) if(条件1&&条件2) { … } →条件1と条件2も満たした時に { }内を実行 →両方満たす必要がある AまたはB、という条件は|| で表す(or) if(条件1 || 条件2){ … } →条件1か条件2を満たした時に { }内を実行 →片方満たせば良い 例: if( x==2 || x==4) → xが2か4なら 2008年度ゲームプログラミング 2、ボールを反復させよう 以下のような構造になります updateGame() { y = y + dy ; yが0以下なら dy = - dy; yが228以上なら dy = - dy; } ※228 = 画面の高さ240 - ボールの幅12 →画面下隅にボールがある時の座標 2008年度ゲームプログラミング 3、物体を上下左右に移動(1) 課題1 変数y,dyを使ってボールを縦方向に移動 課題3 変数x,dxを使ってボールを横方向にも移動 x ボールの横の位置を示す変数 dx ボールがどれだけ横に移動するか、 変化する量を示す変数 2008年度ゲームプログラミング 物体を上下左右に移動(2) メソッドの最初で宣言、使う前に初期化 int x, dx; x=1;dx=1; xの値をdxだけ変化させる x=x+dx; 跳ね返り処理 if(x>=228){ dx= -dx; } //右の壁 xをつかって表示 gc.drawImage(0,x,y); 2008年度ゲームプログラミング 4、跳ね返るとスピードUP yの変化の量を増やすとスピードUP →dyの絶対値を大きくしていく 跳ね返った時のみ →if文{}の中にスピードUPの命令を足す 上で跳ね返った後のdyは正(+) →さらに1足す 下で跳ね返った後のdyは負(ー) →さらに1引く 2008年度ゲームプログラミング 5、床で弾んでいるように 引力を表現 常に下向きに加速する → dy = dy + 1; 跳ね返り係数を表現 跳ね返った瞬間にスピードが減少する → 跳ね返りのif文で dy を遅く
© Copyright 2025 ExpyDoc