[Debutant] Animation sprite
Bonjour ,
Mon programme est simple , c'est une interface graphique avec un sprite qui marche.
J'ai une erreur que je n'arrive pas a identifier dans mon programme, a chaque fois il me balance à l'excution :
Citation:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at robotGraphique.graphicalRenderer(robotGraphique.java:104)
at robotGraphique$1.windowOpened(robotGraphique.java:55)
at java.awt.Window.processWindowEvent(Window.java:1187)
at javax.swing.JFrame.processWindowEvent(JFrame.java:266)
at java.awt.Window.processEvent(Window.java:1148)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Code:
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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
public class robotGraphique implements KeyListener{
//nom des fichiers sprites a charger
private static final String strImgMove = "024.png";
private static final String strImgDie = "dead.png";
//Index des images de deplacement du robot
private static final int IMG_DOWN = 0;
private static final int IMG_LEFT = 1;
private static final int IMG_RIGHT = 2;
private static final int IMG_UP = 3;
//coordonées maximum du robot
private final static int MAX_HEIGHT=520;
private final static int MIN_HEIGHT=200;
private final static int MAX_WIDTH=740;
private final static int MIN_WIDTH=0;
//coordonnée du robot
private int x=MAX_WIDTH/2;
private int y=MAX_HEIGHT/2;
private BufferStrategy strategy;
private Graphics buffer;
private Image[][] imgTab;
private Image img;
private Image imgDie;
private JFrame fenetre;
private MediaTracker MT;
public robotGraphique(){
imgTab = new Image[4][4];
//On creer une nouvelle fenetre
fenetre = new JFrame("Controle robot");
//On lui definit un fond d'ecran gris
fenetre.setBackground(Color.GRAY);
//On récupére la taille de l'ecran
Dimension dimEcran = Toolkit.getDefaultToolkit().getScreenSize();
fenetre.setSize(800,600);
//On definit la place de la fenetre sur l'ecran
fenetre.setLocation((dimEcran.width-800)/2,(dimEcran.height-600)/2);
//On la rend visible
fenetre.setVisible(true);
//On ajoute le KeyListener et WindowListener
fenetre.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){fenetre.dispose();}
public void windowActivated(WindowEvent evt){graphicalRenderer();}
public void windowOpened(WindowEvent e){graphicalRenderer();}
public void windowClosed(WindowEvent evt){System.exit(0);}}
);
fenetre.addKeyListener(this);
//On gére nous meme l'affichage
fenetre.setIgnoreRepaint(true);
//Mise en place du buffering
fenetre.createBufferStrategy(2);
strategy = fenetre.getBufferStrategy();
//On charge les images dans le buffer
imageLoad();
//On verifie que les images soient chargées
if(MT.checkAll()==false)
System.exit(-48000);
graphicalRenderer();
}
public static void main(String args[]){
new robotGraphique();
}
private void imageLoad(){
int index=0;
CropImageFilter c;
MT =new MediaTracker(fenetre);
//On charge notre image
img = Toolkit.getDefaultToolkit().getImage(strImgMove);
for(int ligne=0;ligne<4;ligne++){
for(int col=0;col<4;col++){
c = new CropImageFilter(32*col,48*ligne,32,48);
imgTab[ligne][col] =fenetre.createImage(
new FilteredImageSource(img.getSource(), c));
//ajoute l'image au media tracker [index est une reference sur l'image dans MT]
MT.addImage(imgTab[ligne][col],index);
}
}
img = Toolkit.getDefaultToolkit().getImage(strImgDie);
c = new CropImageFilter(0,0,32,48);
img = imgDie = fenetre.createImage(
new FilteredImageSource(img.getSource(), c));
MT.addImage(imgDie,index);
try {
MT.waitForAll();
} catch (InterruptedException e) {
System.out.println("MT.waitForAll() "+e);
}
}
public void graphicalRenderer(){
buffer = strategy.getDrawGraphics();
buffer.setColor(Color.LIGHT_GRAY);
buffer.fillRect(0,0,800,600);
buffer.drawImage(img,x,y,null);
strategy.show();
}
public void keyPressed(KeyEvent key){
}
public void keyReleased(KeyEvent key){
deplace(key.getKeyCode());
}
public void keyTyped(KeyEvent key){}
public void deplace(int keyValue){
int i=0;
switch(keyValue){
case 37:{
do{
i++; if(i==4) i=0;
try{
img = imgTab[IMG_LEFT][i];
x-=2;
if(x<MIN_WIDTH)
x=MIN_WIDTH;
Thread.sleep(125);
graphicalRenderer();
}catch(Exception e){
System.out.println("MOVE LEFT : "+e);
}
}while(i!=0);
break;
}
case 38:{
do{
i++; if(i==4) i=0;
try{
img = imgTab[IMG_UP][i];
y-=2;
if(y<MIN_HEIGHT)
y=MIN_HEIGHT;
Thread.sleep(125);
graphicalRenderer();
}catch(Exception e){
System.out.println("MOVE UP : "+e);
}
}while(i!=0);
break;
}
case 39:{
do{
i++; if(i==4) i=0;
try{
img = imgTab[IMG_RIGHT][i];
x+=2;
if(x>MAX_WIDTH)
x=MAX_WIDTH;
Thread.sleep(125);
graphicalRenderer();
}catch(Exception e){
System.out.println("MOVE RIGHT : "+e);
}
}while(i!=0);
break;
}
case 40:{
do{
i++; if(i==4) i=0;
try{
img = imgTab[IMG_DOWN][i];
y+=2;
if(y>MAX_HEIGHT)
y=MAX_HEIGHT;
Thread.sleep(125);
graphicalRenderer();
}catch(Exception e){
System.out.println("MOVE DOWN : "+e);
}
}while(i!=0);
break;
}
case 35:{
img = imgDie;
graphicalRenderer();
}
}
}
} |