###前提・実現したいこと
現在、swingを使ってシューティングゲームを作ろうとしているのですが、わからないところがあります。
###発生している問題
①,プログラムを実行すると、図形がプログラム通り(敵は自動、戦闘機はキー入力によって)移動するのですが、再描画前の図形が残ったままの状態になります。
②,①の状態のまま最小化を行うと再描画前の図形が消えて期待した描画が行われます。(また①の状態に戻る)
エラー文は出ません。
この問題の解決方法はあるのでしょうか。
回答宜しくお願いいたします。
java
1package shooting; 2 3import javax.swing.JFrame; 4 5public class Main { 6 public static void main(String[] args) { 7 JFrame obj = new JFrame(); 8 Gameplay gamePlay = new Gameplay(); 9 obj.setBounds(10, 10, 500, 1000); 10 obj.setTitle("Shooting Game"); 11 obj.setResizable(false); 12 obj.setVisible(true); 13 obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 14 obj.add(gamePlay); 15 } 16}
java
1package shooting; 2 3import java.awt.Color; 4import java.awt.Graphics; 5import java.awt.event.ActionEvent; 6import java.awt.event.ActionListener; 7import java.awt.event.KeyEvent; 8import java.awt.event.KeyListener; 9import java.awt.image.BufferedImage; 10import java.io.File; 11 12import javax.imageio.ImageIO; 13import javax.swing.JPanel; 14import javax.swing.Timer; 15 16public class Gameplay extends JPanel implements KeyListener, ActionListener{ 17 private Timer timer; 18 private int enemyposX = 100; 19 private int fighterposX = 240; 20 private int delay = 8; 21 private int enemyXdir = 5; 22 private int count = 0; 23 BufferedImage imgfighter; 24 25 public Gameplay(){ 26 addKeyListener(this); 27 setFocusable(true); 28 setFocusTraversalKeysEnabled(false); 29 timer = new Timer(delay, this); 30 timer.start(); 31 } 32 public void paint(Graphics g){ 33 34 //enemy 35 g.setColor(Color.red); 36 g.fillRect(enemyposX, 100, 50, 50); 37 //Fighter 38// g.setColor(Color.blue); 39// g.fillRect(fighterposX, 800, 40, 40); 40 File file = new File("D:\\ShootingGame\\src\\shooting\\nc98625.png"); 41 try{ 42 imgfighter = ImageIO.read(file); 43 } catch (Exception e){ 44 } 45 g.drawImage(imgfighter, fighterposX, 800, this); 46 47 g.dispose(); 48 } 49 50 @Override 51 public void actionPerformed(ActionEvent e) { 52 moveEnemy(); 53 repaint(); 54 } 55 56 @Override 57 public void keyTyped(KeyEvent e) { 58 } 59 60 @Override 61 public void keyPressed(KeyEvent e) { 62 if(e.getKeyCode() == KeyEvent.VK_RIGHT){ 63 if(fighterposX >= 460){ 64 fighterposX = 460; 65 } else { 66 moveRight(); 67 } 68 } 69 if(e.getKeyCode() == KeyEvent.VK_LEFT){ 70 if(fighterposX <= 0){ 71 fighterposX = 0; 72 } else { 73 moveLeft(); 74 } 75 } 76 if(e.getKeyCode() == KeyEvent.VK_SPACE){ 77 } 78 } 79 80 @Override 81 public void keyReleased(KeyEvent e) { 82 83 } 84 public void moveRight(){ 85 fighterposX += 10; 86 } 87 public void moveLeft(){ 88 fighterposX -= 10; 89 } 90 public void moveEnemy(){ 91 count ++; 92 if(count == 10){ 93 if(enemyposX > 445 || enemyposX < 0){ 94 enemyXdir = -enemyXdir; 95 enemyposX += enemyXdir; 96 } 97 if(enemyposX <= 445 || enemyposX >= 0){ 98 enemyposX += enemyXdir; 99 } 100 count = 0; 101 } 102 } 103}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/10 10:56