2012-02-06 4 views
0

J'écris un jeu simple. J'ai 3 classes la première: la balle qui s'occupe de tout ce qui y est référencé, la seconde qui fait partie d'une série de "balles" et la dernière est windows, celle qui contient le fil principal. Window.paint appelle game.draw afin de recevoir les graphismes de la scène de jeu. Alors que le jeu lui-même double le buffering afin que l'objet Image puisse être déplacé vers l'emplacement de la balle du joueur (pas encore implémenté). Par conséquent, mon problème est dû au fait que je crée un objet Image mais quelquechose parce que celui-ci a été initialisé à zéro, donc je reçois une exception NullPointerException.Java - double buffering NullPointerException

est ici la source des méthodes qui traitent de la peinture:

public class MyWindow extends JFrame { 
     //...the other code 
     public void paint(Graphics g){ 
      thegame.draw(); 
      repaint(); 
     } 
} 

public class Game extends JFrame implements Runnable { 
    ball[] cellmap; 

    //...the other code 

    public void draw(){ 
     Image GameImage = createImage(800,800); 
     Graphics GameGraphics = GameImage.getGraphics(); 

     for(int i = 0;i<cellmap.length;i++) 
      cellmap[i].draw(GameGraphics); 

     g.drawImage(GameImage, 0, 0, this); 
    } 
} 

public class Ball extends JFrame { 
     //...the other code 
    public void draw(Graphics g){ 
     g.setColor(Color.red); 
     g.fillOval((int)(this.x+this.radious),(int)(this.y+this.radious), 
         (int)this.radious,(int)this.radious);   
    } 
} 
+3

S'il vous plaît me dire que vous n'êtes pas réellement utiliser lowerCamelCase pour les classes et UpperCamelCase pour les variables. –

+0

Peut-être lié: http://stackoverflow.com/questions/1541845/problems-with-createimageint-width-int-height –

+0

Ce code a commencé à mal tourner dès que le 2ème 'JFrame' a été introduit, sans parler de la 3ème ! Pour une meilleure aide plus tôt, postez un [SSCCE] (http://sscce.org/). –

Répondre

3

1) s'il vous plaît lire Java Naming Conventions

2) pas une bonne peinture idée directement à la JFrame, mettez votre peinture à l'JComponent, JLabel, JPanel

3) pour Painting dans Swing méthode d'utilisation paintComponent, veuillez ne pas les méthodes paint(Graphics g) ou draw(Graphics g)

4) si vous voulez retarder ou animer vous utilisez la peinture javax.swing.Timer

+0

bien je ne savais pas qu'il existe de telles conventions de nommage, alors maintenant je l'ai corrigé. J'ai essayé d'utiliser paintComponent plutôt que de peindre, mais je n'arrivais pas à comprendre comment l'implémenter, quand j'ai un tableau de boules et que je dois tout peindre. De plus, des boules peuvent être créées pendant le jeu. –

+0

@kirill J'ai édité votre message :-) – mKorbel

+0

J'ai aussi modifié mon commentaire. –