###前提・実現したいこと
キー入力で追加したzikidamaの次に追加したzikidamaを消したい
###発生している問題・エラーメッセージ
二回目がzikidama発射された時にremoveすると最初のzikidamaも消える
###該当のソースコード
java
1import javax.swing.JF; 2 3import java.awt.*; 4import java.awt.event.*; 5 6public class MyGame extends JFrame implements ActionListener, MouseMotionListener{ 7 8 int zikiX = 750;//自機のX座標 9 int zikiY = 225;//自機のY座標 10 11 int zikidamaX = zikiX-30;//自機の弾のX座標 12 int zikidamaY = zikiY;//自機の弾のY座標 13 14 int count;//カウント感知用変数 15 16 ImageIcon icon1 = new ImageIcon 17 ("C:\Users\miyab\Desktop\シューティングゲーム\自機.png");//自機の画像ファイル指定;//ImageIconのicon1作成 18 ImageIcon icon2 = new ImageIcon 19 ("C:\Users\miyab\Desktop\シューティングゲーム\自機弾.png");//自機弾の画像ファイル指定;//ImageIconのicon2作成 20 21 JLabel ziki;//JLabelのziki作成 22 JLabel zikizahyou;//JLabelのzikizahyou作成 23 JLabel zikidamazahyou;////JLabelのzikidamazahyou作成 24 JLabel zikidama;//JLabelのzikidama作成 25 26 JPanel panel;//JPanelのpanel作成 27 28 Timer timer;//Timerのtimer作成 29 30 public static void main(String[] args){ 31 32 MyGame frame = new MyGame();//ウィンドウを内部的に作成 33 frame.setSize(900, 550);//ウィンドウサイズ設定 34 frame.setTitle("シューティングゲーム"); 35 frame.setLocationRelativeTo(null);//ウィンドウの位置を中央に設定 36 37 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 38 //ウィンドウを×で閉じるようにする設定 39 40 frame.setVisible(true);//ウィンドウを可視化 41 42 } 43 44 MyGame(){ 45 46 panel = new JPanel();//panel設定 47 panel.setLayout(null);//レイアウトマネージャー無効化 48 49 ziki = new JLabel(icon1);//JLabelに自機の画像ファイル設定 50 zikizahyou = new JLabel();//自機の座標を入れる 51 zikidamazahyou = new JLabel();//自機の弾の座標を入れる 52 zikidama = new JLabel(icon2);//JLabelに自機の弾の画像ファイル設定 53 54 ziki.setBounds(zikiX, zikiY, 80, 40);//zikiのサイズと座標設定 55 zikizahyou.setText("自機 "+"X座標:"+zikiX+" Y座標:"+zikiY);//自機の座標を設定 56 zikizahyou.setBounds(5, 5, 200, 15);//自機の座標の座標とサイズを設定 57 zikidamazahyou.setText("自機の弾 "+"X座標:"+zikidamaX+" Y座標:"+zikidamaY);//自機の座標を設定 58 zikidamazahyou.setBounds(5, 17, 200, 15);//自機の座標の座標とサイズを設定 59 60 timer = new Timer(10, this); 61 62 panel.add(ziki);//自機画像をpanelに追加 63 panel.add(zikizahyou);//自機の座標を画面に表示 64 panel.add(zikidamazahyou);//自機の弾の座標を画面に表示 65 66 pack(); 67 68 getContentPane().add(panel, BorderLayout.CENTER);//??? 69 70 enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK);//キーイベントの有効化 71 72 addMouseMotionListener(this); 73 74 } 75 76 protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数 77 78 if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){ 79 80 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_A){ 81 82 zikidamaX = zikiX-30; 83 zikidamaY = zikiY; 84 85 zikidama.setBounds(zikidamaX, zikidamaY, 20, 20);//自機の弾のサイズと座標を設定 86 panel.add(zikidama);//panelにzikidamaを追加 87 88 if(zikidama.getParent() == panel){ 89 90 91 92 } 93 timer.start(); 94 95 } 96 } 97 } 98 99 public void actionPerformed(ActionEvent e){ 100 101 if(zikidamaX <= 0){ 102 103 timer.stop();//timerストップ 104 panel.remove(zikidama); 105 panel.repaint(); 106 107 zikidamaX = zikiX-30; 108 zikidamaY = zikiY; 109 zikidama.setBounds(zikidamaX, zikidamaY, 20, 20);//自機の弾のサイズと座標を設定 110 111 }else{ 112 113 zikidamaX -= 15;//zikidamaX[0]を-5 114 zikidama.setLocation(zikidamaX,zikidamaY);//座標を再設定 115 zikidamazahyou.setText("自機の弾 "+"X座標:"+zikidamaX+" Y座標:"+zikidamaY); 116 //座標表示を更新 117 118 } 119 120 } 121 122 public void mouseMoved(MouseEvent e){ 123 124 Point point = e.getPoint(); 125 zikiX = point.x-43; 126 zikiY = point.y-45; 127 128 if(zikiX <= 0){//座標が画面外に行ったら左端に戻す 129 130 zikiX = 0;//zikiのX座標を0に設定 131 132 } 133 134 if(zikiX >= 804){//座標が画面外に行ったら右端に戻す 135 136 zikiX = 804;//zikiのX座標を804に設定 137 138 } 139 140 if(zikiY <= 1){//座標が画面外に行ったら上端に戻す 141 142 zikiY = 1;//zikiのY座標を1に設定 143 144 } 145 146 if(zikiY >= 471){//座標が画面外に行ったら下端に戻す 147 148 zikiY = 471;//zikiのY座標を471に設定 149 150 } 151 152 ziki.setLocation(zikiX,zikiY);//座標を再設定 153 zikizahyou.setText("自機 "+"X座標:"+zikiX+" Y座標:"+zikiY);//座標表示を更新 154 155 } 156 157 public void mouseDragged(MouseEvent e){ 158 159 160 161 } 162 163}
###試したこと
カウントの変数を使って一回目に+1して
画面にzikidamaがあってcountが1だったら
removeするとコードを書いた
結果:最初のzikidamaも消えた
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。