Bonjour à tous, je créé ce topic parce que j'ai un léger soucis sur le fonctionnement sur la game loop de mon projet.
Voilà, je suis en train de développer une application de type space Invaders mais le JPanel d'affichage du jeu refuse de m'afficher quoique ce soit. ça va faire près de 3 semaines que je m'arrache les cheveux et franchement j'ai pas envie de devenir chauve .
Je vous mets la classe Abstraite permettant de gérer les Panels appelés dans ma JFrame :
Ici voici la classe héritant de Config Class dans laquelle j'appel le contrôleur qui doit afficher la partie de jeu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public abstract class ConfigClass { protected JPanel panel; public ConfigClass(Dimension dim){ panel = new JPanel(); panel.setPreferredSize(new Dimension (dim)); } public JPanel getPanel(){ return this.panel; } protected abstract void initPanel();
Et enfin voici la classe DrawGamePanel, du package Controler, celui ci est composé de toutes les méthodes nécessaires aux calculs et à l'affichage de la game loop. et c'est dans celle-ci que j'ai mon problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class GamePanel extends ConfigClass{ private PlayerShip playerShip = new PlayerShip(); private Shot shot1 = new Shot(); public GamePanel(Dimension dim){ super(dim); initPanel(); } protected void initPanel(){ Toolkit tk = Toolkit.getDefaultToolkit(); Cursor invisCursor = tk.createCustomCursor(tk.createImage(""),new Point(),null); panel.setCursor(invisCursor); panel.setLayout(new BorderLayout()); panel.removeAll(); //panel.add(new DrawGamePanel(new Dimension(panel.getWidth(),panel.getHeight())).getPanel(), BorderLayout.CENTER); panel.add(new DrawGamePanel(), BorderLayout.CENTER); panel.revalidate(); } }
J'obtient un nullPointException sur l'objet Graphics g à la seconde ligne de la méthode drawScreen.
Si vous avez besoin du code complet demandez moi, je vous l'enverrai.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 public final class DrawGamePanel extends JPanel implements MouseMotionListener{ private PlayerShip player; private EnnemiesShip enemy; private Shot shot; private BufferedImage buffer; public DrawGamePanel(){ setIgnoreRepaint(true); addMouseMotionListener(this); setFocusable(true); Initialize(); while (true){ try{ update(); checkCollisions(); drawBuffer(); this.drawScreen(); Thread.sleep(15); }catch(Exception e){ e.printStackTrace(); } } } public void Initialize(){ buffer = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB); player = new PlayerShip(); enemy = new EnnemiesShip(); shot = new Shot(); } public void update(){ } public void checkCollisions(){ if(player.getBounds().intersects(enemy.getBounds())){ player.collision = true; }else{ player.collision = false; } } public void drawBuffer(){ Graphics2D b = buffer.createGraphics(); b.setColor(Color.black); b.fillRect(0, 0, 800, 600); if (player.collision == false) { b.setColor(Color.red); b.fillRect(player.getXPosition(), player.getYPosition(), player.getWidth(), player.getHeight()); b.setColor(Color.blue); b.fillRect(enemy.getXPosition(), enemy.getYPosition(), enemy.getWidth(), enemy.getHeight()); b.dispose(); } else { b.setColor(Color.white); b.drawString("C O L L I S I O N !", 350, 300); b.dispose(); } } public void drawScreen() { Graphics2D g = (Graphics2D) this.getGraphics(); g.drawImage(buffer, 0, 0, this); Toolkit.getDefaultToolkit().sync(); g.dispose(); } public void startGame() { } public void mouseDragged(MouseEvent me) {} public void mouseMoved(MouseEvent me) { player.setXPosition(me.getX()-25); player.setYPosition(me.getY()-25); } }
En espérant que vous puissiez m'aider.
Merci d'avance.
Partager