第4回:ボールを画面内で弾ませよう! (オブジェクトの移動、二次元) 2003年度ゲームプログラミング ゲームプログラミング 第4回:ボールを画面内で弾ませよう! (オブジェクトの移動、二次元)
物体を上下左右に移動(1) 前回 変数y,dyを使ってボールを縦方向に移動 今回 変数x,dxを使ってボールを横方向にも移動 2003年度ゲームプログラミング 物体を上下左右に移動(1) 前回 変数y,dyを使ってボールを縦方向に移動 今回 変数x,dxを使ってボールを横方向にも移動 x ボールの横の位置を示す変数 dx ボールがどれだけ横に移動するか、 変化する量を示す変数
物体を上下左右に移動(2) メソッドの最初で宣言、使う前に初期化 int x, dx; x=1;dx=1; xの値をdxだけ変化させる 2003年度ゲームプログラミング 物体を上下左右に移動(2) メソッドの最初で宣言、使う前に初期化 int x, dx; x=1;dx=1; xの値をdxだけ変化させる x=x+dx; 跳ね返り処理 if(x>120){ dx= -dx; } //右の壁 xをつかって表示 g.drawImage(img,x,y,…);
枠の表示 塗りつぶさない四角形を描くメソッドを使う。 g.drawRect(x,y,w,h); (x,y) 左上の座標 (w+1) 幅 2003年度ゲームプログラミング 枠の表示 塗りつぶさない四角形を描くメソッドを使う。 g.drawRect(x,y,w,h); (x,y) 左上の座標 (w+1) 幅 (h+1) 高さ g.setColor(0x000000);//描画色を黒に g.drawRect(0,0,131,143); //枠を描く
枠の中でボールを動かそう 枠のところで跳ね返るように、 跳ね返りの条件を変更 枠の幅は1 →判定を1づつ内側に 2003年度ゲームプログラミング 枠の中でボールを動かそう 枠のところで跳ね返るように、 跳ね返りの条件を変更 枠の幅は1 →判定を1づつ内側に
残像を表示させてチェック 背景の表示を切って、残像を出してみよう 壁と残像に隙間があく →当たり判定が手前すぎる 壁にボールがめり込む 2003年度ゲームプログラミング 残像を表示させてチェック 背景の表示を切って、残像を出してみよう 壁と残像に隙間があく →当たり判定が手前すぎる 壁にボールがめり込む →当たり判定が奥すぎる、または、 →壁際まで戻す処理を入れていない
枠の色を変えよう 描画色はg.setColor()で変更する g.setColor(0xRRGGBB); 2003年度ゲームプログラミング 枠の色を変えよう 描画色はg.setColor()で変更する g.setColor(0xRRGGBB); RR,GG,BBに赤(Red)、緑(Green)、青(Blue)の強さを16進数で入れる 00(最小) → 80(中くらい) → FF(最大)
枠の色を変えよう g.setColor(0xFF0000); →赤い要素のみ→赤 g.setColor(0x00FF00); 2003年度ゲームプログラミング 枠の色を変えよう g.setColor(0xFF0000); →赤い要素のみ→赤 g.setColor(0x00FF00); →緑の要素のみ→緑 g.setColor(0xFF00FF); →赤い光と青の光のブレンド→紫
枠に当たるたびに色を変える 枠に何回当たったかを数えて、当たった回数で色を変える →何回当たったかを保存する変数が必要 宣言と初期化 2003年度ゲームプログラミング 枠に当たるたびに色を変える 枠に何回当たったかを数えて、当たった回数で色を変える →何回当たったかを保存する変数が必要 宣言と初期化 int point; point=0; 枠に当たった時に回数を増やす point++;
回数に応じて色を変える 演算子% A%B AをBで割った余り (0~B-1)の範囲の値になる 2003年度ゲームプログラミング 回数に応じて色を変える 演算子% A%B AをBで割った余り (0~B-1)の範囲の値になる if(point%3==0) g.setColor(色1); if(point%3==1) g.setColor(色2); if(point%3==2) g.setColor(色3); g.drawRect();//枠を描く
ボールが当たると消える的(1) ボールが当たったら消える(=表示しない) →表示するかしないかの判断が必要 →的の有無を示すのに変数を使用 2003年度ゲームプログラミング ボールが当たると消える的(1) ボールが当たったら消える(=表示しない) →表示するかしないかの判断が必要 →的の有無を示すのに変数を使用 値が1の時:的がある(的を表示) 値が0の時:的がない(的を表示しない) このような何かの有無、可否を示す変数を フラッグと言う
ボールが当たると消える的(2) 変数の宣言 int blockflag; 変数の初期化 →最初は的がある状態なので、初期値は1 2003年度ゲームプログラミング ボールが当たると消える的(2) 変数の宣言 int blockflag; 変数の初期化 →最初は的がある状態なので、初期値は1 blockflag=1; 的の表示 →blockflagが1の時のみ表示する if (blockflag==1) g.drawImage(…);
ボールが当たると消える的(3) ボールが的に当たったら、ボールを消す →blockflagを0にする if(ボールと的が重なっている){ 2003年度ゲームプログラミング ボールが当たると消える的(3) ボールが的に当たったら、ボールを消す →blockflagを0にする if(ボールと的が重なっている){ blockflag=0; } ボールと的が重なったかは、座標を比較して判断。
ボールが当たると消える的(4) ボール、的の大きさは縦12、横12とする 2003年度ゲームプログラミング ボールが当たると消える的(4) ボール、的の大きさは縦12、横12とする ボールと的が接触している時、ボールと的のx座標の差、y座標の差がそれぞれ12未満 →引き算の結果が-12と12の間 y-50 > -12 かつ y-50 < 12 かつ x-50 > -12 かつ x-50 < 12 (的を(50,50)に表示した場合) 複数の条件を両方とも満たす必要がある時は「&&」でつなぐ