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