if (条件)

Download Report

Transcript if (条件)

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 を遅く