アプリ版:「スタンプのみでお礼する」機能のリリースについて

Javaでゲームを書いていてどうしてもできないところがあります。
スペースボタンを押したときと、Bボタンを押したときの攻撃のグラフィックを変えたいのですが、どちらのボタンを押してもスペースのときの画像になってしまいます。
ソースが長いため一部しか載せていませんが必要であれば分割して載せることも可能です。

どなたか教えていただけますでしょうか。

public void keyPressed ( KeyEvent e ){//(KeyEvent e ){//キーが押された時に実行//void外したら
if(e.getID()==KeyEvent.KEY_PRESSED){
switch (e.getKeyCode()){

case KeyEvent.VK_SPACE :
smokeflag = true;
iceflag = false;
sh_x=0;
sh_y=0;
//return smokeflag;
// magictype = 0;
break;
case KeyEvent.VK_B ://氷魔法
iceflag = true;
smokeflag = false;
sh_x=0;
sh_y=0;
// magictype = 1;
//return iceflag;
break;

}
}
}
public void dataload() {

MediaTracker mt = new MediaTracker(this);
TitleImage = getImage(getCodeBase(), "image/title.jpg");
mt.addImage(TitleImage, 0);
for(int i=0;i<2;i++){

if( smokeflag == true ){
magictype = 0;
}
else if( iceflag == true ){
magictype = 1;
}

MagicImage[i] = getImage(getCodeBase(), "car/image/magic/" + magictype + "_" + i + ".gif");//car//magictype
mt.addImage(MagicImage[i], 0);
}
try{
mt.waitForID(0);
} catch(InterruptedException e) {
showStatus(""+e);
}
}

A 回答 (3件)

これだけだとなんとも判断できませんが、各動作をテストするのが早道かと。


デバッガを使うとか、デバグ表示用ウインドウを用意するかコンソールを使うかして、要所要所でメソッドの呼び出しや変数の値が想定通りかどうか調べてみてください。

○keyPressed
・キーを押した時にこのメソッドが呼ばれているか
・押したキーとswitch caseでの分岐とが一致しているか
○dataload
・想定したタイミングでこのメソッドが呼ばれているか
・ファイル名が想定通りか
○共通
・メソッド開始直後と戻る直前で変数がどう変化しているか(いないか)

○これらの結果から考えること
絵が変らない原因として考えられるのは
・キー入力の判定が想定通りでない: 判定ロジックが正しくない、そもそも判定メソッドが呼ばれていない、等
・画像表示が想定通りではない: 画像が違う、表示が更新されていない、実は一瞬表示されているがすぐ元に戻ってしまっている、そもそも表示メソッドが呼ばれていない、等
・変数がこれ以外のところで書き変わっている: 毎ループ初期化されている、スコープが違っている等
    • good
    • 0

keyPressedから抜けて、どう値を受け渡しているか、ということでしょう。

コメントアウトしてなにやらreturnしていますが、keyPressedはvoidなわけでreturnでどうこうできるものでもありません。このあたりの受け渡しの問題と思います。こういう場合は、それぞれの状況に応じて、すべてのフラグ変数を設定しなおします。ですのでコメントアウトされた部分は、

//return smokeflag; → smokeflag = true;
//return iceflag; → iceflag = true;

こういうことでしょうか。
また、指定のcaseでない場合には、それぞれのフラグをfalseに戻すなどの処理も忘れないようにしてください。つまり、case KeyEvent.VK_SPACE :であれば、smokeflag = true;と同時にiceflag = false;もしておく必要があるでしょう。また、magictypeは、両方で値を設定している感じなので、現在、コメントアウトされている部分は不要でしょう。

この回答への補足

変数のスコープはpublicです。
なので、それぞれのcaseでtrueになれば反映されると思うのですが。
それぞれのcaseで必要の無いフラグはfalseにしています。

違う方法がありましたらご教授お願いします。

補足日時:2011/05/04 10:33
    • good
    • 0

javaのソースってこんなもんでしたっけ?変数の宣言要りますよね。


まあ、JAVAはそこまで詳しくないので置いておきます。

keyPressedってので処理を切り替えたいのだと思いますけど、
結局returnで返してるのはtrueになるんじゃないですかね。
フラグは定めてますけどいまいち効果がわからないような。

変数のスコープとかどうなってるんでしょうか。


おそらく、画像を選ぶとこのフラグが同じモノなので同じ画像が出ている。
そこら辺のコントロールができてないんじゃないですかね。

いまいちプログラムっぽい考え方ができてない気がします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!