質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1929閲覧

Java Windowに画像を入れたい

117894552

総合スコア2

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

1クリップ

投稿2021/06/08 22:13

編集2021/06/09 03:16

前提・実現したいこと

現在Javaで動画を見ながらShootinggameを作っています。
参考 :https://www.bing.com/videos/search?q=java+shooting+game&&view=detail&mid=D3214E5636C97CC297A8D3214E5636C97CC297A8&&FORM=VRDGAR&ru=%2Fvideos%2Fsearch%3Fq%3Djava%2520shooting%2520game%26qs%3DAS%26form%3DQBVR%26sp%3D2%26pq%3Djava%2520shooting%26sk%3DHS1%26sc%3D4-13%26cvid%3D8D08CDB4127745DEB8494211FE7F8385
一通り完成したので、自分なりに変えたいと思っています。
ゲームスタート画面に画像を挿入したいです
参考 :https://www.bing.com/videos/search?q=java+%e7%94%bb%e5%83%8f&&view=detail&mid=6DB1C742992D3236CCEE6DB1C742992D3236CCEE&&FORM=VRDGAR&ru=%2Fvideos%2Fsearch%3Fq%3Djava%2520%25E7%2594%25BB%25E5%2583%258F%26qs%3Dn%26form%3DQBVR%26sp%3D-1%26pq%3Djava%2520%25E7%2594%25BB%25E5%2583%258F%26sc%3D8-7%26sk%3D%26cvid%3D8D7F28E3208F4622976BD5684F5CC2CD

発生している問題・エラーメッセージ

エラーは出ていませんが、画像は出ません

該当のソースコード

JAVA

1 2Shooting 3package game; 4 5import java.awt.BorderLayout; 6import java.awt.Color; 7import java.awt.Container; 8import java.awt.Font; 9import java.awt.FontMetrics; 10import java.awt.Graphics; 11import java.awt.event.KeyEvent; 12import java.util.ArrayList; 13import java.util.Random; 14 15import javax.swing.*; 16 17public class Shooting { 18 19 public static ShootingFrame shootingFrame; //変数の設定(どこからでも使えるように) 20 public static boolean loop; //変数でループを終われるように 21 22 public static void main(String[] args) { 23 24 shootingFrame = new ShootingFrame(); //フレーム生成 タイトルとか大きさとか設定したやつ 25 loop = true; 26 27 //ゲームの開始 28 Graphics gra = shootingFrame.panel.image.getGraphics(); 29 30 //FPS 31 long startTime = 0; 32 long fpsTime = 0; 33 int fps = 30; 34 int FPS = 0; 35 int FPSCount = 0; 36 37 EnumShootingScreen screen = EnumShootingScreen.START; 38 39 //GAME 40 int playerX = 0; 41 int playerY = 0; 42 int score = 0; 43 int level = 0; 44 long levelTimer = 0; 45 int bulletInterval = 0; //玉を遅くする 46 ArrayList<Bullet> bullets_player = new ArrayList<>(); 47 ArrayList<Bullet> bullets_enemy = new ArrayList<>(); 48 ArrayList<Enemy> enemies = new ArrayList<>(); 49 Random random = new Random(); 50 51 while (loop) { 52 if ((System.currentTimeMillis() - fpsTime) >= 1000) { 53 54 fpsTime = System.currentTimeMillis(); 55 FPS = FPSCount; 56 FPSCount = 0; 57 58 } 59 FPSCount++; 60 61 startTime = System.currentTimeMillis(); 62 63 gra.setColor(Color.WHITE); //背景色 64 gra.fillRect(0, 0, 500, 500); 65 66 switch (screen) { 67 case START: 68 69 gra.setColor(Color.BLACK); //描画色 70 71 Font font = new Font("SansSerif", Font.PLAIN, 50); 72 gra.setFont(font); 73 FontMetrics metrics = gra.getFontMetrics(font); //フォント描画をカプセル化する 74 gra.drawString("Shooting", 250 - (metrics.stringWidth("Shooting") / 2), 100); 75 76 font = new Font("SansSerif", Font.PLAIN, 20); 77 gra.setFont(font); 78 metrics = gra.getFontMetrics(font); 79 gra.drawString("スペース押したら始まる", 250 - (metrics.stringWidth("Press SPACE to Start") / 2), 160); 80 81 //画像挿入 82 83 //JFrame frame = new JFrame("テスト"); 84 85 Container contentPane = shootingFrame.getContentPane(); 86 87 JLabel label = new JLabel("にゃんこ"); 88 label.setHorizontalAlignment(JLabel.CENTER); 89 ImageIcon icon = new ImageIcon( 90 "C:省略"); 91 JLabel picture = new JLabel(icon); 92 93 contentPane.add(picture, BorderLayout.CENTER); 94 contentPane.add(label, BorderLayout.NORTH); 95 shootingFrame.setVisible(true); 96 97 //*/ 98 99 if (Keyboard.isKeyPressed(KeyEvent.VK_SPACE)) { 100 screen = EnumShootingScreen.GAME; //画面遷移 101 bullets_player = new ArrayList<>(); //ゲーム開始時に初期化 102 enemies = new ArrayList<>(); 103 playerX = 235; 104 playerY = 430; 105 score = 0; 106 level = 0; 107 } 108 109 break; 110 111 case GAME: 112 113 if (System.currentTimeMillis() - levelTimer > 10 * 1000) { 114 levelTimer = System.currentTimeMillis(); 115 level++; 116 } 117 118 //味方 119 gra.setColor(Color.BLUE); 120 gra.fillRect(playerX + 10, playerY, 10, 10); 121 gra.fillRect(playerX, playerY + 10, 30, 10); 122 123 for (int i = 0; i < bullets_player.size(); i++) { 124 Bullet bullet = bullets_player.get(i); 125 gra.setColor(Color.BLUE); 126 gra.fillRect(bullet.x, bullet.y, 5, 5); 127 bullet.y -= 10; 128 129 if (bullet.y < 0) { 130 bullets_player.remove(i); 131 i--; 132 } 133 134 for (int l = 0; l < enemies.size(); l++) { 135 Enemy enemy = enemies.get(l); 136 if (bullet.x >= enemy.x && bullet.x <= enemy.x + 30 && 137 bullet.y >= enemy.y && bullet.y <= enemy.y + 20) { 138 enemies.remove(l); 139 140 score += 10; 141 } 142 } 143 } 144 145 //敵キャラ 146 gra.setColor(Color.RED); 147 148 for (int i = 0; i < enemies.size(); i++) { 149 Enemy enemy = enemies.get(i); 150 gra.fillRect(enemy.x, enemy.y, 30, 10); 151 gra.fillRect(enemy.x + 10, enemy.y + 10, 10, 10); 152 enemy.y += 3; 153 if (enemy.y > 500) { 154 enemies.remove(i); 155 i--; 156 } 157 158 if (random.nextInt(level < 50 ? 80 - level : 30) == 1) 159 bullets_enemy.add(new Bullet(enemy.x, enemy.y)); 160 if ((enemy.x >= playerX && enemy.x <= playerX + 30 && 161 enemy.y >= playerY && enemy.y <= playerY + 20) || 162 (enemy.x + 30 >= playerX && enemy.x + 30 <= playerX + 30 && 163 enemy.y + 20 >= playerY && enemy.y + 20 <= playerY + 20)) { 164 165 screen = EnumShootingScreen.GAME_OVER; 166 score += (level - 1) * 100; 167 } 168 } 169 170 if (random.nextInt(level < 10 ? 30 - level : 10) == 1) 171 enemies.add(new Enemy(random.nextInt(470), 0)); 172 173 for (int i = 0; i < bullets_enemy.size(); i++) { 174 Bullet bullet = bullets_enemy.get(i); 175 gra.fillRect(bullet.x, bullet.y, 5, 5); 176 bullet.y += 10; 177 178 if (bullet.y > 500) { 179 bullets_enemy.remove(i); 180 i--; 181 } 182 183 if (bullet.x >= playerX && bullet.x <= playerX + 30 && 184 bullet.y >= playerY && bullet.y <= playerY + 20) { 185 screen = EnumShootingScreen.GAME_OVER; 186 score += (level - 1) * 100; 187 } 188 } 189 190 if (Keyboard.isKeyPressed(KeyEvent.VK_LEFT) && playerX > 0) //左に移動 191 playerX -= 8; //左矢印キーを押したあとにマイナスに移動 192 if (Keyboard.isKeyPressed(KeyEvent.VK_RIGHT) && playerX < 470) //右に移動 193 playerX += 8; //左矢印キーを押したあとにマイナスに移動 194 if (Keyboard.isKeyPressed(KeyEvent.VK_UP) && playerY > 30) //上に移動 195 playerY -= 8; //左矢印キーを押したあとにマイナスに移動 196 if (Keyboard.isKeyPressed(KeyEvent.VK_DOWN) && playerY < 450) //下に移動 197 playerY += 8; //左矢印キーを押したあとにマイナスに移動 198 199 if (Keyboard.isKeyPressed(KeyEvent.VK_SPACE) && bulletInterval == 0) { //spaceで発射 200 bullets_player.add(new Bullet(playerX + 12, playerY)); //玉のインスタンスで発射が出来る 201 bulletInterval = 8; 202 } 203 204 if (bulletInterval > 0) 205 bulletInterval--; 206 207 gra.setColor(Color.BLACK); 208 font = new Font("SansSerif", Font.PLAIN, 20); 209 metrics = gra.getFontMetrics(font); 210 gra.setFont(font); 211 gra.drawString("SCORE:" + score, 470 - metrics.stringWidth("SCORE:" + score), 430); 212 gra.drawString("LEVEL:" + level, 470 - metrics.stringWidth("LEVEL:" + level), 450); 213 214 break; 215 216 case GAME_OVER: 217 gra.setColor(Color.BLACK); 218 font = new Font("SansSerif", Font.PLAIN, 30); 219 gra.setFont(font); 220 metrics = gra.getFontMetrics(font); 221 gra.drawString("GAME OVER", 250 - (metrics.stringWidth("Score:" + score) / 2), 150); 222 gra.drawString("Press ESC to Return Start Screen", 223 250 - (metrics.stringWidth("Press ESC to Return Start Screen") / 2), 200); 224 if (Keyboard.isKeyPressed(KeyEvent.VK_ESCAPE)) { 225 screen = EnumShootingScreen.START; 226 } 227 break; 228 229 } 230 231 gra.setColor(Color.BLACK); 232 gra.setFont(new Font("SansSerif", Font.PLAIN, 10)); 233 gra.drawString(FPS + "FPS", 0, 470); 234 235 shootingFrame.panel.draw(); //ブァッフアした結果を表示する関数の呼び出し 236 237 try { 238 long runTime = System.currentTimeMillis() - startTime; 239 if (runTime < (1000 / fps)) { 240 Thread.sleep((1000 / fps) - (runTime)); 241 } 242 243 } catch (InterruptedException e) { 244 e.printStackTrace(); 245 } 246 } 247 } 248} 249 250ShootingFrame 251package game; 252 253import java.awt.event.WindowAdapter; 254import java.awt.event.WindowEvent; 255 256import javax.swing.*; 257 258public class ShootingFrame extends JFrame { 259 260 //drawを変数に 261 public ShootingPanel panel; 262 263 public ShootingFrame() { 264 265 //インスタンス生成 266 panel = new ShootingPanel(); 267 this.add(panel); 268 269 this.addWindowListener(new WindowAdapter() { 270 @Override 271 public void windowClosed(WindowEvent e) { 272 super.windowClosed(e); 273 Shooting.loop = true; 274 } 275 }); 276 277 this.addKeyListener(new Keyboard()); //インスタンス生成 キーボード入力が受け取れる 278 this.setDefaultCloseOperation(EXIT_ON_CLOSE); //×を押したときの処理 279 this.setTitle("Shooting"); //タイトル設定 280 this.setSize(500, 500); // ウィンドウの大きさ 281 this.setLocationRelativeTo(null); //nullで中央に出現 282 this.setResizable(false); //リサイズを不可能に 283 this.setVisible(true); //ウィンドウの表示・非表示 284 285 } 286} 287 288 289

試したこと

Contrainer型の変数をShootingFrameから
取得したのですが、ここが間違っているのでしょうか?

補足情報(FW/ツールのバージョンなど)

eclipse
Version: 2021-03 (4.19.0)

場違いな質問をしているかもしれませんが、
どなたか教えて頂けると幸いです。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/06/08 22:34

補足情報にはカッコにあるようにツールやバージョンなどを記載してください。 あと、デバッグしましたか?
117894552

2021/06/09 03:18

申し訳ありませんでした。追加させて頂きました。 デバックをしてみました。 JFrame frame = new JFrame("テスト"); にブレークポイントを置いてみましたが、エラーがわかりませんでした。申し訳ありません。
m.ts10806

2021/06/09 04:05

細かいですが「デバッグ(debug)」です。 「エラーがわからない」とは?
117894552

2021/06/10 20:05

eclipseのデバックを初めて使ってみました。 エラー部分を探す、という意味にとっていました。 申し訳ありません。
m.ts10806

2021/06/10 22:22

細かいですが「デバッグ(debug)」です。
guest

回答1

0

ベストアンサー

元々がGraphicsに描き込んでいますから、JLabelを入れるより直接描いちゃったほうがいい気がします。

Graphics#drawImage (Java Platform SE 8 )

本題でないところは省略

Java

1import java.awt.Color; 2import java.awt.Font; 3import java.awt.FontMetrics; 4import java.awt.Graphics; 5import java.awt.event.KeyEvent; 6import java.awt.image.BufferedImage; 7import java.io.File; 8import javax.imageio.ImageIO; 9 10public class Shooting { 11 public static ShootingFrame shootingFrame; 12 public static boolean loop; 13 14 public static void main(String[] args) { 15 shootingFrame = new ShootingFrame(); 16 loop = true; 17 18 Graphics gra = shootingFrame.panel.image.getGraphics(); 19 20 long startTime = 0; 21 long fpsTime = 0; 22 int fps = 30; 23 int FPS = 0; 24 int FPSCount = 0; 25 26 EnumShootingScreen screen = EnumShootingScreen.START; 27 28 BufferedImage img = null; 29 try { 30 // 画像読み込み 31 img = ImageIO.read(new File("C:省略")); 32 } catch (Exception e) { 33 e.printStackTrace(); 34 } 35 36 while (loop) { 37 if ((System.currentTimeMillis() - fpsTime) >= 1000) { 38 fpsTime = System.currentTimeMillis(); 39 FPS = FPSCount; 40 FPSCount = 0; 41 } 42 FPSCount++; 43 44 startTime = System.currentTimeMillis(); 45 46 gra.setColor(Color.WHITE); 47 gra.fillRect(0, 0, 500, 500); 48 49 switch (screen) { 50 case START: 51 gra.setColor(Color.BLACK); 52 53 Font font = new Font("SansSerif", Font.PLAIN, 50); 54 gra.setFont(font); 55 FontMetrics metrics = gra.getFontMetrics(font); 56 gra.drawString("Shooting", 250 - (metrics.stringWidth("Shooting") / 2), 100); 57 58 font = new Font("SansSerif", Font.PLAIN, 20); 59 gra.setFont(font); 60 metrics = gra.getFontMetrics(font); 61 gra.drawString("スペース押したら始まる", 250 - (metrics.stringWidth("Press SPACE to Start") / 2), 160); 62 63 64 // 何か文字 65 gra.drawString("にゃんこ", 250 - (metrics.stringWidth("にゃんこ") / 2), 230); 66 67 if (img != null) { 68 // 画像描画 69 gra.drawImage(img, 250 - (img.getWidth() / 2), 250, null); 70 } 71 72 if (Keyboard.isKeyPressed(KeyEvent.VK_SPACE)) { 73 screen = EnumShootingScreen.GAME; 74 } 75 break; 76 77 default: 78 break; 79 } 80 81 gra.setColor(Color.BLACK); 82 gra.setFont(new Font("SansSerif", Font.PLAIN, 10)); 83 gra.drawString(FPS + "FPS", 0, 450); 84 shootingFrame.panel.draw(); 85 86 try { 87 long runTime = System.currentTimeMillis() - startTime; 88 if (runTime < (1000 / fps)) { 89 Thread.sleep((1000 / fps) - (runTime)); 90 } 91 } catch (InterruptedException e) { 92 e.printStackTrace(); 93 } 94 } 95 } 96}

投稿2021/06/09 09:30

TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

117894552

2021/06/10 20:04

ありがとうございます。 無事、画像を挿入することが出来ました。 とてもうれしいです。これから復習してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問