弾の移動は一応できた?のですが
画面から出ても消えずに
もう一回弾を発射できません
どうしたらいいでしょうか?
JAVA
1 2 3import javax.swing.JFrame; 4import javax.swing.JPanel; 5import javax.swing.JLabel; 6import javax.swing.ImageIcon; 7 8import java.awt.BorderLayout; 9import java.awt.event.KeyEvent; 10 11import java.util.Timer; 12import java.util.TimerTask; 13 14public class MyGame extends JFrame{ 15 16 int zikiX[] = {750};//自機のX座標 17 int zikiY[] = {225};//自機のY座標 18 19 int zikidamaX[] = {zikiX[0]-30};//自機の弾のX座標 20 int zikidamaY[] = {zikiY[0]};//自機の弾のY座標 21 22 ImageIcon icon1 = new ImageIcon 23 ("C:\Users\miyab\Desktop\シューティングゲーム\自機.png");//画像ファイル指定 24 ImageIcon icon2 = new ImageIcon 25 ("C:\Users\miyab\Desktop\シューティングゲーム\自機弾.png"); 26 27 JLabel ziki = new JLabel(icon1);//JLabelに自機の画像ファイル設定 28 JLabel zikizahyou = new JLabel();//自機の座標を生成 29 JLabel zikidama = new JLabel(icon2);//JLabelに自機の弾の画像ファイル設定 30 31 JPanel panel = new JPanel();//panel設定 32 33 public static void main(String[] args){ 34 35 MyGame frame = new MyGame();//ウィンドウを内部的に作成 36 frame.setSize(900, 550);//ウィンドウサイズ設定 37 frame.setTitle("シューティングゲーム"); 38 frame.setLocationRelativeTo(null);//ウィンドウの位置を中央に設定 39 40 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 41 //ウィンドウを×で閉じるようにする設定 42 43 frame.setVisible(true);//ウィンドウを可視化 44 45 } 46 47 MyGame(){ 48 49 panel.setLayout(null);//レイアウトマネージャー無効化 50 51 ziki.setBounds(zikiX[0], zikiY[0], 80, 40);//zikiのサイズと座標設定 52 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//自機の座標を設定 53 zikizahyou.setBounds(5, 5, 150, 15);//自機の座標の座標とサイズを設定 54 55 panel.add(ziki);//自機画像をpanelに追加 56 panel.add(zikizahyou);//自機の座標を画面に表示 57 58 getContentPane().add(panel, BorderLayout.CENTER);//??? 59 60 enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK);//キーイベントの有効化 61 62 } 63 64 protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数 65 66 if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){ 67 68 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT){ 69 70 zikiX[0] -= 10;//座標を左に移動 71 if(zikiX[0] <= 0){//座標が画面外に行ったら左端に戻す 72 73 zikiX[0] = 0;//zikiのX座標を0に設定 74 75 } 76 ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 77 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 78 79 } 80 81 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT){ 82 83 zikiX[0] += 10;//座標を右に移動 84 if(zikiX[0] >= 804){//座標が画面外に行ったら右端に戻す 85 86 zikiX[0] = 804;//zikiのX座標を804に設定 87 88 } 89 ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 90 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 91 92 } 93 94 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_UP){ 95 96 zikiY[0] -= 10;//座標を上に移動 97 if(zikiY[0] <= 1){//座標が画面外に行ったら上端に戻す 98 99 zikiY[0] = 1;//zikiのY座標を1に設定 100 101 } 102 ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 103 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 104 105 } 106 107 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN){ 108 109 zikiY[0] += 10;//座標を下に移動 110 if(zikiY[0] >= 471){//座標が画面外に行ったら下端に戻す 111 112 zikiY[0] = 471;//zikiのY座標を471に設定 113 114 } 115 ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 116 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 117 118 } 119 120 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_A){ 121 122 zikidama.setBounds(zikidamaX[0], zikidamaY[0], 20, 20);//自機の弾のサイズと座標を設定 123 panel.add(zikidama);//panelにzikidamaを追加 124 125 TimerTask task = new TimerTask(){//timertaskを設定 126 public void run(){ 127 zikidamaX[0] -= 1;//zikidamaX[0]の座標を-1する 128 zikidama.setLocation(zikidamaX[0],zikidamaY[0]);//座標を再設定 129 } 130 }; 131 132 Timer timer = new Timer();//timerを設定 133 timer.schedule(task, 0L, 1L);//開始までの時間と実行間隔を設定 134 135 System.out.println("X座標:"+zikidamaX[0]);//座標確認用 136 System.out.println("Y座標:"+zikidamaY[0]); 137 138 } 139 140 } 141 } 142 143} 144 145
###変更後
このような使い方でいいでしょうか?
もし間違っているなら
しつこいですが
教えていただけないでしょうか?
理解力がなくてすいません
JAVA
1import javax.swing.JFrame; 2import javax.swing.JPanel; 3import javax.swing.JLabel; 4import javax.swing.ImageIcon; 5import javax.swing.Timer; 6 7import java.awt.BorderLayout; 8import java.awt.event.KeyEvent; 9 10public class MyGame extends JFrame{ 11 12 int zikiX[] = {750};//自機のX座標 13 int zikiY[] = {225};//自機のY座標 14 15 int zikidamaX[] = {zikiX[0]-30};//自機の弾のX座標 16 int zikidamaY[] = {zikiY[0]};//自機の弾のY座標 17 18 ImageIcon icon1 = new ImageIcon 19 ("C:\Users\miyab\Desktop\シューティングゲーム\自機.png");//画像ファイル指定 20 ImageIcon icon2 = new ImageIcon 21 ("C:\Users\miyab\Desktop\シューティングゲーム\自機弾.png"); 22 23 JLabel ziki = new JLabel(icon1);//JLabelに自機の画像ファイル設定 24 JLabel zikizahyou = new JLabel();//自機の座標を生成 25 JLabel zikidama = new JLabel(icon2);//JLabelに自機の弾の画像ファイル設定 26 27 JPanel panel = new JPanel();//panel設定 28 29 public static void main(String[] args){ 30 31 MyGame frame = new MyGame();//ウィンドウを内部的に作成 32 frame.setSize(900, 550);//ウィンドウサイズ設定 33 frame.setTitle("シューティングゲーム"); 34 frame.setLocationRelativeTo(null);//ウィンドウの位置を中央に設定 35 36 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 37 //ウィンドウを×で閉じるようにする設定 38 39 frame.setVisible(true);//ウィンドウを可視化 40 41 } 42 43 MyGame(){ 44 45 panel.setLayout(null);//レイアウトマネージャー無効化 46 47 ziki.setBounds(zikiX[0], zikiY[0], 80, 40);//zikiのサイズと座標設定 48 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//自機の座標を設定 49 zikizahyou.setBounds(5, 5, 150, 15);//自機の座標の座標とサイズを設定 50 51 panel.add(ziki);//自機画像をpanelに追加 52 panel.add(zikizahyou);//自機の座標を画面に表示 53 54 getContentPane().add(panel, BorderLayout.CENTER);//??? 55 56 enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK);//キーイベントの有効化 57 58 } 59 60 protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数 61 62 if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){ 63 64 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT){ 65 66 zikiX[0] -= 10;//座標を左に移動 67 if(zikiX[0] <= 0){//座標が画面外に行ったら左端に戻す 68 69 zikiX[0] = 0;//zikiのX座標を0に設定 70 71 } 72 ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 73 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 74 75 } 76 77 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT){ 78 79 zikiX[0] += 10;//座標を右に移動 80 if(zikiX[0] >= 804){//座標が画面外に行ったら右端に戻す 81 82 zikiX[0] = 804;//zikiのX座標を804に設定 83 84 } 85 ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 86 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 87 88 } 89 90 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_UP){ 91 92 zikiY[0] -= 10;//座標を上に移動 93 if(zikiY[0] <= 1){//座標が画面外に行ったら上端に戻す 94 95 zikiY[0] = 1;//zikiのY座標を1に設定 96 97 } 98 ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 99 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 100 101 } 102 103 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN){ 104 105 zikiY[0] += 10;//座標を下に移動 106 if(zikiY[0] >= 471){//座標が画面外に行ったら下端に戻す 107 108 zikiY[0] = 471;//zikiのY座標を471に設定 109 110 } 111 ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定 112 zikizahyou.setText("X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新 113 114 } 115 116 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_A){ 117 118 zikidama.setBounds(zikidamaX[0], zikidamaY[0], 20, 20);//自機の弾のサイズと座標を設定 119 panel.add(zikidama);//panelにzikidamaを追加 120 121 System.out.println("X座標:"+zikidamaX[0]);//座標確認用 122 System.out.println("Y座標:"+zikidamaY[0]); 123 124 } 125 126 } 127 } 128 129 void Timer(){ 130 131 Timer dama = new Timer(10, event ->{//timerを設定 132 133 zikidamaX[0] -= 1;//zikidamaX[0]の座標を-1する 134 zikidama.setLocation(zikidamaX[0], zikidamaY[0]); 135 if(zikidamaX[0] <= 0){ 136 137 138 139 } 140 141 }); 142 } 143 144}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/01 11:29
2017/10/01 12:05
2017/10/01 12:56