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件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
これだけだとなんとも判断できませんが、各動作をテストするのが早道かと。
デバッガを使うとか、デバグ表示用ウインドウを用意するかコンソールを使うかして、要所要所でメソッドの呼び出しや変数の値が想定通りかどうか調べてみてください。
○keyPressed
・キーを押した時にこのメソッドが呼ばれているか
・押したキーとswitch caseでの分岐とが一致しているか
○dataload
・想定したタイミングでこのメソッドが呼ばれているか
・ファイル名が想定通りか
○共通
・メソッド開始直後と戻る直前で変数がどう変化しているか(いないか)
○これらの結果から考えること
絵が変らない原因として考えられるのは
・キー入力の判定が想定通りでない: 判定ロジックが正しくない、そもそも判定メソッドが呼ばれていない、等
・画像表示が想定通りではない: 画像が違う、表示が更新されていない、実は一瞬表示されているがすぐ元に戻ってしまっている、そもそも表示メソッドが呼ばれていない、等
・変数がこれ以外のところで書き変わっている: 毎ループ初期化されている、スコープが違っている等
No.2
- 回答日時:
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にしています。
違う方法がありましたらご教授お願いします。
No.1
- 回答日時:
javaのソースってこんなもんでしたっけ?変数の宣言要りますよね。
まあ、JAVAはそこまで詳しくないので置いておきます。
keyPressedってので処理を切り替えたいのだと思いますけど、
結局returnで返してるのはtrueになるんじゃないですかね。
フラグは定めてますけどいまいち効果がわからないような。
変数のスコープとかどうなってるんでしょうか。
おそらく、画像を選ぶとこのフラグが同じモノなので同じ画像が出ている。
そこら辺のコントロールができてないんじゃないですかね。
いまいちプログラムっぽい考え方ができてない気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
final修飾子を使っているのに、...
-
コマンドプロンプト実行後に画...
-
VBPをダブルクリックするとたま...
-
ExcelのxlDialogInsertPictureで。
-
javascriptからjavaを呼び出したい
-
DataGridViewでセルクリックイ...
-
java のプログラム
-
ExcelVBA Findメソッドで検索の...
-
エクセルVBAにおけるON TIMEメ...
-
staticメソッドの長所短所
-
リストボックスの項目削除
-
Javaのわからない問題がありま...
-
Refreshメソッドの使い方
-
javaの質問です 次の機能を有す...
-
オーバーロードの「あいまい」...
-
mainメソッドのthrows節で設定...
-
C#で右からnカラム目に文字を挿...
-
ディレクトリの階層構造をツリ...
-
VB.NET/256色でのBMPファイル保存
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
エクセルVBAにおけるON TIMEメ...
-
【sendkeysメソッドが動かずに...
-
コマンドプロンプト実行後に画...
-
onClickで関数呼出し後に、結果...
-
DataGridViewでセルクリックイ...
-
Labelコントロールに数字を代入...
-
ExcelのxlDialogInsertPictureで。
-
final修飾子を使っているのに、...
-
JSPで<SELECT>の中にDBから持っ...
-
VBPをダブルクリックするとたま...
-
Excel VBA でExcelを終了したい...
-
Refreshメソッドの使い方
-
ウィンドウを最前面にできません
-
javascriptからjavaを呼び出したい
-
VB.netで、シリアル通信のタイ...
-
mainメソッドのthrows節で設定...
-
VBAでSaveAs使用し、指定してい...
-
PDFファイルから別ウィンドウで...
-
Application.Wait の参照設定
おすすめ情報