質問編集履歴

3

追記の修正

2017/10/04 14:04

投稿

Alpa
Alpa

スコア80

test CHANGED
File without changes
test CHANGED
@@ -378,9 +378,17 @@
378
378
 
379
379
  **タイマーハンドラーについて**
380
380
 
381
+ タイムハンドラーではzikidamaXが0になるまで
382
+
383
+ zikidamaX-15をしてそのあと座標を再設定
384
+
385
+ そしてzikidamaの座標の表示の更新をしています
386
+
387
+ そしてzikidamaXが0になったらtimerをストップして
388
+
381
- すいませんタイマーハンドラーというのが
389
+ zikidamaをpanelから消して
382
-
390
+
383
- よくわかりせん
391
+ そのあとpanelをrepaintしてい
384
392
 
385
393
 
386
394
 

2

追記の追加

2017/10/04 14:04

投稿

Alpa
Alpa

スコア80

test CHANGED
File without changes
test CHANGED
@@ -353,3 +353,45 @@
353
353
  ・zikidamaの座標設定をzikiの左にしっかり設定したい↓
354
354
 
355
355
  座標設定をzikiにしてみた
356
+
357
+
358
+
359
+ ###追記
360
+
361
+
362
+
363
+ **弾の発射処理について**
364
+
365
+ まずAを押したらキーイベントで押したことを判定して
366
+
367
+ panelにzikidamaを追加
368
+
369
+ そのあとtimerをスタートさせて
370
+
371
+ 画面の端に来たらtimerをストップさせ
372
+
373
+ zikidamaをpanelから削除して
374
+
375
+ そのあとpanelをrepaintしています
376
+
377
+
378
+
379
+ **タイマーハンドラーについて**
380
+
381
+ すいませんタイマーハンドラーというのが
382
+
383
+ よくわかりません
384
+
385
+
386
+
387
+ **弾の座標にどんな値が指定されているかについて**
388
+
389
+ 弾の座標にはzikiの X座標-30 Y座標±0 が設定されています
390
+
391
+ またそれはzikiの座標をまず X=750 Y=225 に設定していて
392
+
393
+ その座標の X-30 Y±0 をzikidamaのX,Yというように設定しているから
394
+
395
+
396
+
397
+ こんな感じですかね

1

コードタグの削除

2017/10/04 13:42

投稿

Alpa
Alpa

スコア80

test CHANGED
File without changes
test CHANGED
@@ -12,348 +12,344 @@
12
12
 
13
13
 
14
14
 
15
+ ・パネルにzikidamaを追加して消したあともう一回zikidama追加したい↓
16
+
17
+ 消すまではできたがもう一回zikidamaを追加できない
18
+
19
+
20
+
21
+ ・zikidamaの座標設定をzikiの左にしっかり設定したい↓
22
+
23
+ zikiを移動させても初期値の場所からしか発射されない
24
+
25
+
26
+
27
+ ###該当のソースコード
28
+
29
+ ```java
30
+
31
+
32
+
33
+ import javax.swing.*;
34
+
35
+
36
+
37
+ import java.awt.*;
38
+
39
+ import java.awt.event.*;
40
+
41
+
42
+
43
+ public class MyGame extends JFrame implements ActionListener, MouseMotionListener{
44
+
45
+
46
+
47
+ int zikiX[] = {750};//自機のX座標
48
+
49
+ int zikiY[] = {225};//自機のY座標
50
+
51
+
52
+
53
+ int zikidamaX[] = {zikiX[0]-30};//自機の弾のX座標
54
+
55
+ int zikidamaY[] = {zikiY[0]};//自機の弾のY座標
56
+
57
+
58
+
59
+ int count;//カウント感知用変数
60
+
61
+
62
+
63
+ ImageIcon icon1 = new ImageIcon
64
+
65
+ ("C:\Users\***\Desktop\シューティングゲーム\自機.png");
66
+
67
+ //自機の画像ファイル指定;//ImageIconのicon1作成
68
+
69
+ ImageIcon icon2 = new ImageIcon
70
+
71
+ ("C:\Users\***\Desktop\シューティングゲーム\自機弾.png");
72
+
73
+ //自機弾の画像ファイル指定;//ImageIconのicon2作成
74
+
75
+
76
+
77
+ JLabel ziki;//JLabelのziki作成
78
+
79
+ JLabel zikizahyou;//JLabelのzikizahyou作成
80
+
81
+ JLabel zikidamazahyou;////JLabelのzikidamazahyou作成
82
+
83
+ JLabel zikidama;//JLabelのzikidama作成
84
+
85
+
86
+
87
+ JPanel panel;//JPanelのpanel作成
88
+
89
+
90
+
91
+ Timer timer;//Timerのtimer作成
92
+
93
+
94
+
95
+ public static void main(String[] args){
96
+
97
+
98
+
99
+ MyGame frame = new MyGame();//ウィンドウを内部的に作成
100
+
101
+ frame.setSize(900, 550);//ウィンドウサイズ設定
102
+
103
+ frame.setTitle("シューティングゲーム");
104
+
105
+ frame.setLocationRelativeTo(null);//ウィンドウの位置を中央に設定
106
+
107
+
108
+
109
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
110
+
111
+ //ウィンドウを×で閉じるようにする設定
112
+
113
+
114
+
115
+ frame.setVisible(true);//ウィンドウを可視化
116
+
117
+
118
+
119
+ }
120
+
121
+
122
+
123
+ MyGame(){
124
+
125
+
126
+
127
+ panel = new JPanel();//panel設定
128
+
129
+ panel.setLayout(null);//レイアウトマネージャー無効化
130
+
131
+
132
+
133
+ ziki = new JLabel(icon1);//JLabelに自機の画像ファイル設定
134
+
135
+ zikizahyou = new JLabel();//自機の座標を入れる
136
+
137
+ zikidamazahyou = new JLabel();//自機の弾の座標を入れる
138
+
139
+ zikidama = new JLabel(icon2);//JLabelに自機の弾の画像ファイル設定
140
+
141
+
142
+
143
+ ziki.setBounds(zikiX[0], zikiY[0], 80, 40);//zikiのサイズと座標設定
144
+
145
+ zikizahyou.setText("自機 "+"X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//自機の座標を設定
146
+
147
+ zikizahyou.setBounds(5, 5, 200, 15);//自機の座標の座標とサイズを設定
148
+
149
+ zikidamazahyou.setText("自機の弾 "+"X座標:"+zikidamaX[0]+" Y座標:"+zikidamaY[0]);//自機の座標を設定
150
+
151
+ zikidamazahyou.setBounds(5, 17, 200, 15);//自機の座標の座標とサイズを設定
152
+
153
+
154
+
155
+ timer = new Timer(10, this);
156
+
157
+
158
+
159
+ panel.add(ziki);//自機画像をpanelに追加
160
+
161
+ panel.add(zikizahyou);//自機の座標を画面に表示
162
+
163
+ panel.add(zikidamazahyou);//自機の弾の座標を画面に表示
164
+
165
+
166
+
167
+ pack();
168
+
169
+
170
+
171
+ getContentPane().add(panel, BorderLayout.CENTER);//???
172
+
173
+
174
+
175
+ enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK);//キーイベントの有効化
176
+
177
+
178
+
179
+ addMouseMotionListener(this);
180
+
181
+
182
+
183
+ }
184
+
185
+
186
+
187
+ protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数
188
+
189
+
190
+
191
+ if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){
192
+
193
+
194
+
195
+ if(e.getKeyCode() == java.awt.event.KeyEvent.VK_A){
196
+
197
+
198
+
199
+ zikidama.setBounds(zikidamaX[0], zikidamaY[0], 20, 20);//自機の弾のサイズと座標を設定
200
+
201
+ panel.add(zikidama);//panelにzikidamaを追加
202
+
203
+
204
+
205
+ timer.start();
206
+
207
+
208
+
209
+ }
210
+
211
+ }
212
+
213
+ }
214
+
215
+
216
+
217
+ public void actionPerformed(ActionEvent e){
218
+
219
+
220
+
221
+ if(zikidamaX[0] <= 0){
222
+
223
+
224
+
225
+ timer.stop();//timerストップ
226
+
227
+ panel.remove(zikidama);
228
+
229
+ panel.repaint();
230
+
231
+
232
+
233
+ }else{
234
+
235
+
236
+
237
+ zikidamaX[0] -= 15;//zikidamaX[0]を-5
238
+
239
+ zikidama.setLocation(zikidamaX[0],zikidamaY[0]);//座標を再設定
240
+
241
+ zikidamazahyou.setText("自機の弾 "+"X座標:"+zikidamaX[0]+" Y座標:"+zikidamaY[0]);
242
+
243
+ //座標表示を更新
244
+
245
+
246
+
247
+ }
248
+
249
+
250
+
251
+ }
252
+
253
+
254
+
255
+ public void mouseMoved(MouseEvent e){
256
+
257
+
258
+
259
+ Point point = e.getPoint();
260
+
261
+ zikiX[0] = point.x-43;
262
+
263
+ zikiY[0] = point.y-45;
264
+
265
+
266
+
267
+ if(zikiX[0] <= 0){//座標が画面外に行ったら左端に戻す
268
+
269
+
270
+
271
+ zikiX[0] = 0;//zikiのX座標を0に設定
272
+
273
+
274
+
275
+ }
276
+
277
+
278
+
279
+ if(zikiX[0] >= 804){//座標が画面外に行ったら右端に戻す
280
+
281
+
282
+
283
+ zikiX[0] = 804;//zikiのX座標を804に設定
284
+
285
+
286
+
287
+ }
288
+
289
+
290
+
291
+ if(zikiY[0] <= 1){//座標が画面外に行ったら上端に戻す
292
+
293
+
294
+
295
+ zikiY[0] = 1;//zikiのY座標を1に設定
296
+
297
+
298
+
299
+ }
300
+
301
+
302
+
303
+ if(zikiY[0] >= 471){//座標が画面外に行ったら下端に戻す
304
+
305
+
306
+
307
+ zikiY[0] = 471;//zikiのY座標を471に設定
308
+
309
+
310
+
311
+ }
312
+
313
+
314
+
315
+ ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定
316
+
317
+ zikizahyou.setText("自機 "+"X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新
318
+
319
+
320
+
321
+ }
322
+
323
+
324
+
325
+ public void mouseDragged(MouseEvent e){
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+ }
334
+
335
+
336
+
337
+ }
338
+
339
+
340
+
15
341
  ```
16
342
 
343
+
344
+
345
+ ###試したこと
346
+
17
347
  ・パネルにzikidamaを追加して消したあともう一回zikidama追加したい↓
18
348
 
19
- 消すまではできたがう一回zikidamaを追加できない
349
+ とくに何していない
20
350
 
21
351
 
22
352
 
23
353
  ・zikidamaの座標設定をzikiの左にしっかり設定したい↓
24
354
 
25
- zikiを移動させても初期値の場所からしか発射されない
26
-
27
- ```
28
-
29
-
30
-
31
- ###該当のソースコード
32
-
33
- ```java
34
-
35
-
36
-
37
- import javax.swing.*;
38
-
39
-
40
-
41
- import java.awt.*;
42
-
43
- import java.awt.event.*;
44
-
45
-
46
-
47
- public class MyGame extends JFrame implements ActionListener, MouseMotionListener{
48
-
49
-
50
-
51
- int zikiX[] = {750};//自機のX座標
52
-
53
- int zikiY[] = {225};//自機のY座標
54
-
55
-
56
-
57
- int zikidamaX[] = {zikiX[0]-30};//自機の弾のX座標
58
-
59
- int zikidamaY[] = {zikiY[0]};//自機の弾のY座標
60
-
61
-
62
-
63
- int count;//カウント感知用変数
64
-
65
-
66
-
67
- ImageIcon icon1 = new ImageIcon
68
-
69
- ("C:\Users\***\Desktop\シューティングゲーム\自機.png");
70
-
71
- //自機の画像ファイル指定;//ImageIconのicon1作成
72
-
73
- ImageIcon icon2 = new ImageIcon
74
-
75
- ("C:\Users\***\Desktop\シューティングゲーム\自機弾.png");
76
-
77
- //自機弾の画像ファイル指定;//ImageIconのicon2作成
78
-
79
-
80
-
81
- JLabel ziki;//JLabelのziki作成
82
-
83
- JLabel zikizahyou;//JLabelのzikizahyou作成
84
-
85
- JLabel zikidamazahyou;////JLabelのzikidamazahyou作成
86
-
87
- JLabel zikidama;//JLabelのzikidama作成
88
-
89
-
90
-
91
- JPanel panel;//JPanelのpanel作成
92
-
93
-
94
-
95
- Timer timer;//Timerのtimer作成
96
-
97
-
98
-
99
- public static void main(String[] args){
100
-
101
-
102
-
103
- MyGame frame = new MyGame();//ウィンドウを内部的に作成
104
-
105
- frame.setSize(900, 550);//ウィンドウサイズ設定
106
-
107
- frame.setTitle("シューティングゲーム");
108
-
109
- frame.setLocationRelativeTo(null);//ウィンドウの位置を中央に設定
110
-
111
-
112
-
113
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
114
-
115
- //ウィンドウを×で閉じるようにする設定
116
-
117
-
118
-
119
- frame.setVisible(true);//ウィンドウを可視化
120
-
121
-
122
-
123
- }
124
-
125
-
126
-
127
- MyGame(){
128
-
129
-
130
-
131
- panel = new JPanel();//panel設定
132
-
133
- panel.setLayout(null);//レイアウトマネージャー無効化
134
-
135
-
136
-
137
- ziki = new JLabel(icon1);//JLabelに自機の画像ファイル設定
138
-
139
- zikizahyou = new JLabel();//自機の座標を入れる
140
-
141
- zikidamazahyou = new JLabel();//自機の弾の座標を入れる
142
-
143
- zikidama = new JLabel(icon2);//JLabelに自機の弾の画像ファイル設定
144
-
145
-
146
-
147
- ziki.setBounds(zikiX[0], zikiY[0], 80, 40);//zikiのサイズと座標設定
148
-
149
- zikizahyou.setText("自機 "+"X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//自機の座標を設定
150
-
151
- zikizahyou.setBounds(5, 5, 200, 15);//自機の座標の座標とサイズを設定
152
-
153
- zikidamazahyou.setText("自機の弾 "+"X座標:"+zikidamaX[0]+" Y座標:"+zikidamaY[0]);//自機の座標を設定
154
-
155
- zikidamazahyou.setBounds(5, 17, 200, 15);//自機の座標の座標とサイズを設定
156
-
157
-
158
-
159
- timer = new Timer(10, this);
160
-
161
-
162
-
163
- panel.add(ziki);//自機画像をpanelに追加
164
-
165
- panel.add(zikizahyou);//自機の座標を画面に表示
166
-
167
- panel.add(zikidamazahyou);//自機の弾の座標を画面に表示
168
-
169
-
170
-
171
- pack();
172
-
173
-
174
-
175
- getContentPane().add(panel, BorderLayout.CENTER);//???
176
-
177
-
178
-
179
- enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK);//キーイベントの有効化
180
-
181
-
182
-
183
- addMouseMotionListener(this);
184
-
185
-
186
-
187
- }
188
-
189
-
190
-
191
- protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数
192
-
193
-
194
-
195
- if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){
196
-
197
-
198
-
199
- if(e.getKeyCode() == java.awt.event.KeyEvent.VK_A){
200
-
201
-
202
-
203
- zikidama.setBounds(zikidamaX[0], zikidamaY[0], 20, 20);//自機の弾のサイズと座標を設定
204
-
205
- panel.add(zikidama);//panelにzikidamaを追加
206
-
207
-
208
-
209
- timer.start();
210
-
211
-
212
-
213
- }
214
-
215
- }
216
-
217
- }
218
-
219
-
220
-
221
- public void actionPerformed(ActionEvent e){
222
-
223
-
224
-
225
- if(zikidamaX[0] <= 0){
226
-
227
-
228
-
229
- timer.stop();//timerストップ
230
-
231
- panel.remove(zikidama);
232
-
233
- panel.repaint();
234
-
235
-
236
-
237
- }else{
238
-
239
-
240
-
241
- zikidamaX[0] -= 15;//zikidamaX[0]を-5
242
-
243
- zikidama.setLocation(zikidamaX[0],zikidamaY[0]);//座標を再設定
244
-
245
- zikidamazahyou.setText("自機の弾 "+"X座標:"+zikidamaX[0]+" Y座標:"+zikidamaY[0]);
246
-
247
- //座標表示を更新
248
-
249
-
250
-
251
- }
252
-
253
-
254
-
255
- }
256
-
257
-
258
-
259
- public void mouseMoved(MouseEvent e){
260
-
261
-
262
-
263
- Point point = e.getPoint();
264
-
265
- zikiX[0] = point.x-43;
266
-
267
- zikiY[0] = point.y-45;
268
-
269
-
270
-
271
- if(zikiX[0] <= 0){//座標が画面外に行ったら左端に戻す
272
-
273
-
274
-
275
- zikiX[0] = 0;//zikiのX座標を0に設定
276
-
277
-
278
-
279
- }
280
-
281
-
282
-
283
- if(zikiX[0] >= 804){//座標が画面外に行ったら右端に戻す
284
-
285
-
286
-
287
- zikiX[0] = 804;//zikiのX座標を804に設定
288
-
289
-
290
-
291
- }
292
-
293
-
294
-
295
- if(zikiY[0] <= 1){//座標が画面外に行ったら上端に戻す
296
-
297
-
298
-
299
- zikiY[0] = 1;//zikiのY座標を1に設定
300
-
301
-
302
-
303
- }
304
-
305
-
306
-
307
- if(zikiY[0] >= 471){//座標が画面外に行ったら下端に戻す
308
-
309
-
310
-
311
- zikiY[0] = 471;//zikiのY座標を471に設定
312
-
313
-
314
-
315
- }
316
-
317
-
318
-
319
- ziki.setLocation(zikiX[0],zikiY[0]);//座標を再設定
320
-
321
- zikizahyou.setText("自機 "+"X座標:"+zikiX[0]+" Y座標:"+zikiY[0]);//座標表示を更新
322
-
323
-
324
-
325
- }
326
-
327
-
328
-
329
- public void mouseDragged(MouseEvent e){
330
-
331
-
332
-
333
-
334
-
335
-
336
-
337
- }
338
-
339
-
340
-
341
- }
342
-
343
-
344
-
345
- ```
346
-
347
-
348
-
349
- ###試したこと
350
-
351
- ・パネルにzikidamaを追加して消したあともう一回zikidama追加したい↓
352
-
353
- とくに何もしていない
354
-
355
-
356
-
357
- ・zikidamaの座標設定をzikiの左にしっかり設定したい↓
358
-
359
355
  座標設定をzikiにしてみた