2008年度ゲームプログラミング ゲームプログラミング 第4回:ラケットを動かそう! (方向キーによる物体の操作) 2008年度ゲームプログラミング 方向キーでバーを動かそう バーを描く →前回までに習ったことの応用 キーの入力処理 →今回新しく学ぶ 2008年度ゲームプログラミング バーの表示 塗りつぶし四角形を描くメソッド fillRect(x,y,w,h)を使う。 gc.setColor(バーの色); gc.fillRect(x座標,y座標、幅、高さ); 2008年度ゲームプログラミング バーの移動 左右に動くのでバーのx座標を変数に。 int barx; //宣言 barx=80; //初期化 gc.fillRect(barx,237,36,2); //barxの場所にバーを描く barxの値を変化させるとバーが動く 2008年度ゲームプログラミング キーの入力を処理する gc.isKeyPress() でキーが押されたか を判断できる どのキーが押されたかを判断して、左右 が押された時のみbarxの値を変える 2008年度ゲームプログラミング 方向キーの入力を得る updateGameの中を以下のように書く if(gc.isKeyPress(gc.KEY_RIGHT)) { 右が押された時の処理; } if(gc.isKeyPress(gc.KEY_LEFT)){ 左が押された時の処理; } 2008年度ゲームプログラミング ボールを逃したらゲームを中断 ゲームをストップさせる →updateGame()内で ボール等の動きの処理を 行わないようにする ゲームが中断しているかどうかを判断する為に 、ゲームの状態を示す変数を使う int gameState;//宣言 gameState=0;//初期化(0:ゲーム中 1:中断) 2008年度ゲームプログラミング ゲームを中断 updateGameは自動的に呼ばれるので、 中断している時は何もしないで終了する メソッドの最初に以下を加える if(gameState!=0)return; ※return そのメソッドの実行を終了する。 以後の命令は実行されない 2008年度ゲームプログラミング ボールを逃したかどうかの判定 ボールが下の壁に来た時にボールのあ る場所にバーがなかったら、ゲームを中 断(gameStateを1に) ボールとバーの座標を比較して、ボー ルが落ちてきた場所にバーがあるか判 断する 2008年度ゲームプログラミング ボールを逃したかどうかの判定 if (ボールが下に来た){ if(ボールのある場所にバーがある){ 跳ね返り処理; } else { gameState=1; //中断 } } 2008年度ゲームプログラミング ボールを逃したかどうかの判定 ボールがバーの左端にある場合 ○ === → x == barx ボールがバーの右端にある場合 ○ === → x == barx+24 xがbarxとbarx+24の間なら、跳ね返す 2008年度ゲームプログラミング バーの動くスピードを変える バーのスピードを示す変数を準備 int barspeed; barspeed=1; スピードを示す変数使ってバーを動かす if(右を押している) barx+=barspeed; if(左を押している)barx-=barspeed; ボタンを押したらスピードを変更 if(ボタン1押している)barspeed=1; if(ボタン2押している)barspeed=2; 2008年度ゲームプログラミング 方向キー以外のボタンの判定 gc.isKeyPress()に渡す値を変えてやる if(gc.isKeyPress(gc.KEY_0)) 0が押されている If(gc.isKeyPress(gc.KEY_4)) 4が押されている 「*」はgc.KEY_ASTERISK 「#」はgc.KEY_SHARP 2008年度ゲームプログラミング その他のキー入力処理 gc.isKeyPress()はキーを押しているかどう かを判定しました。他にも以下の三種類の命 令があります。 – gc.isKeyPushed() • キーを押した瞬間か調べる – gc.isKeyReleased() • キーを離した瞬間か調べる – gc.getKeyPressLength() • キーを押している長さを調べる 2008年度ゲームプログラミング その他のキー入力 if(gc.isKeyPushed(gc.KEY_SELECT) ) { 決定キーが押された時の処理 } If(gc.isKeyReleased(gc.KEY_0) ){ 0キーが離された時の処理 } if(gc.getKeyPressLength(gc.KEY_1) > 10){ 1キーを一秒以上押し続けた時の処理 } 2008年度ゲームプログラミング 3回受け損ねたら終了 受け損ねた回数を保存する変数を用意 int miss; //宣言 miss=0; //初期化 受け損ねたらmissを増やし、3回以上ならゲ ームを中断、3回未満なら跳ね返してやる 2008年度ゲームプログラミング 下壁の跳ね返り処理を改造 if(バーが有る){ 跳ね返り処理 } else{ miss数を1増やす; if(missが3以上)ゲーム中断; else{ 跳ね返り処理 } } 2008年度ゲームプログラミング 「0」を押すと初期化 初期化するメソッドを作って、0が押された時に呼ぶ メソッドの書き方 型 名前(引数){ 命令1 命令2 、、、 } void init(){ x=10;dx=1;barx=・・・; などなど } メソッドの使い方 if(0が押された) init(); ※コンストラクタ(game())内からも呼んでおくと、起動時にも初期化される 2008年度ゲームプログラミング 受け逃してもいい回数を表示 ボールを描く関数を適宜呼ぶ 動かしているボールを描画 if(miss<=1) 左上に書く if(miss==0) 左上の1個分隣に書く
© Copyright 2024 ExpyDoc