Scintillement ou trainée de mon image : problème de thread

C _ Line Messages postés 4 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 18 décembre 2009 - 21 déc. 2005 à 10:44
Belette32 Messages postés 57 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2007 - 22 déc. 2005 à 12:15
Voici mon code :

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Image;
import java.awt.event.*;
import java.net.*;

public class sans_scintillement extends java.applet.Applet implements Runnable, KeyListener
{
// Charset du personnage
public Image charset;
// Sprite du personnage
public Image charsetAngel;
// Image producer du charset du personnage
public ImageProducer improd;
// Filtre permettant de délimiter une zone de découpage
// du charset afin d'obtenir le sprite
public ImageFilter filter;

// Coordonnées du sprite
public int xSprite=0, xAnc=0;
public int ySprite=0, yAnc=0;

// Coordonnées du personnage
public int x=100;
public int y=100;

// Traitement pour l'animation
Thread runner=null;

protected AudioClip aC = null;

// Méthode init
public void init()
{
// Fond gris
setBackground (Color.lightGray);
// Récupération de l'image (charset) ange.png
charset=getImage(getCodeBase(),"ange.png");
// Récupération de l'image producer
improd=charset.getSource();
filter=new CropImageFilter(xSprite,ySprite,80,64);
charsetAngel=createImage(new FilteredImageSource(improd,filter));

addKeyListener(this);

super.init();
try
{
AppletContext ac = getAppletContext();
if (ac != null)
aC = ac.getAudioClip(new URL(getDocumentBase(), "theme.mid"));
else
System.out.println(" fichier son introuvable ");
}
catch (MalformedURLException e) {}
aC.loop();
}

public void paint(Graphics g)
{
// Affichage du sprite
g.drawImage(charsetAngel,x,y,160,128,this);
//add(new Label("x : "+charset.getWidth(this)/4+" - y : "+charset.getHeight(this)/4));
}

public void keyPressed(KeyEvent evt)
{
int key = evt.getKeyCode();
switch (key)
{
case KeyEvent.VK_DOWN:
y=y+5;
ySprite=0;
break;
case KeyEvent.VK_UP:
y=y-5;
ySprite=192;
break;
case KeyEvent.VK_LEFT:
x=x-5;
ySprite=64;
break;
case KeyEvent.VK_RIGHT:
x=x+5;
ySprite=128;
break;
}
// Changement des images à chaque pas
if(xSprite==0) xSprite=80;
else if(xSprite==80) xSprite=160;
else if(xSprite==160) xSprite=240;
else if(xSprite==240) xSprite=0;

// Découpage du sprite
filter=new CropImageFilter(xSprite,ySprite,80,64);
charsetAngel=createImage(new FilteredImageSource(improd,filter));
}
public void keyTyped(KeyEvent evt) {}
public void keyReleased(KeyEvent evt) {}

// Méthode start
public void start()
{
if(runner==null)
{
runner=new Thread(this);
runner.start();
}
}

// Méthode stop
public void stop()
{
if(runner!=null)
{
runner.interrupt();
runner=null;
}
}

public void update(Graphics g)
{
paint(g);
}

// Méthode run
public void run()
{
while(true)
{
try
{
//requestFocus();
repaint();
Thread.sleep(50);
}
catch(InterruptedException ie)
{
stop();
}
}
}
}

J'ai un gros problème, lors de l'appui sur les touches flèches, mon personnage laisse une trainée derriere lui... Lorsque j'enlève la méthode update, le personnage scintille... Je suis dans une impasse, j'ai beau éplucher du code (je suis débutante en java), je ne trouve pas l'astuce!
Si quelqu'un peut m'aider svp!

3 réponses

Belette32 Messages postés 57 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2007
21 déc. 2005 à 16:24
Dans ta methode update(), essaye ca :


paint(g);
sans_scintillement gg=new sans_scintillement();


gg.validate();


Le probleme de la trainée vient peut etre du fait que tu ne rafraichis pas ta methode paint (meme si tu met paint(g) ).


Belette32
0
C _ Line Messages postés 4 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 18 décembre 2009
22 déc. 2005 à 09:31
Merci de me répondre Belette32!
J'ai essayé, mais ca ne change rien au problème...
Qui aurait une bonne doc sur les threads?
C'est peut-être parce que je les gère mal!
0
Belette32 Messages postés 57 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 22 novembre 2007
22 déc. 2005 à 12:15
Voici une liste de tout les sites que j'utilise pour developper. Ils proposent tous des cours interressants ainsi que des exemples :

www.infini-fr.com/Sciences/Informatique/Langages/Imperatifs/Java/java.html
http://cui.unige.ch/java/exemples/
http://penserenjava.free.fr/pens_2.4/indexSom.html
http://www.infres.enst.fr/~charon/coursJava/index.html#sommaire

Sinon, pour avoir toute les commandes relatives aux classe, va directement sur le site de sun.

Belette32
0
Rejoignez-nous