Ralenti ds mon jeu video qd utilisation de png-24 mais pas de probleme avec png-

dvwyns
Messages postés
159
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
7 mai 2012
- 27 sept. 2008 à 20:32
dvwyns
Messages postés
159
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
7 mai 2012
- 7 oct. 2008 à 12:55
Salut a tous,
voila donc j'ai un problème de ralentissement avec l'utilisation d'images au format png-24 sur un pt jeu d'avion, par contre aucun problème qd j'utilise des images png-8 mais bon c qd même bcp moins beau en 256 couleurs...Je pense que mon pc (2.0Ghz...1,5Go ram) devrait etre assez puissant pour gérer le rafraichissement d'images png-24 sans ralenti
Est ce que quelqu'un serait m'expliquer pourquoi ou mieux... me trouver une solution pour utiliser des png-24 sans avoir de ralentissement.
merci

7 réponses

Utilisateur anonyme
30 sept. 2008 à 13:15
Il se peut que ça vienne du pilote de ta carte graphique. Peux-tu montrer le bout de code que tu utilises pour charger ton image?

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
0
Utilisateur anonyme
30 sept. 2008 à 13:24
Quelle version de Java utilises-tu? Il y a fort longtemps, on avait des ralentissements avec les PNG sur 24 bits et la transparence n'était pas gérée correctement. Ton jeu est sous forme d'applet ou bien d'application lourde? IE a du mal avec les PNG-24. As-tu testé ton jeu sous Linux? As-tu activé l'extension Composite?

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
0
dvwyns
Messages postés
159
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
7 mai 2012

30 sept. 2008 à 20:54
Salut,
Jte remercie d'avoir répondu... voila donc je pense que les pilotes
de ma carte graphique sont installé correctement(cd recu avec).En l'ayant essayé
autre part, le problème persiste tjs.(pas essayé sur Linux)
 En fait je
charge mon image avec le toolkit ->getToolkit().getImage("image.png" );
//fait ds le constructeur...
 Après je mets les <> parties de l'image
ds un tableau d'image (les <> positions du vaisseau par exemple) je
rafraichis les images avec la fonction paintComponent(Graphics g).
code d'initialisation du tableau:
public void initImTab(){//160*120
    int
k=0;
    for(int i=0;i<3;i++){
       for(int
j=0;j<4;j++){
          if(k<9)
            tabAnim[k] =
Toolkit.getDefaultToolkit().createImage( new
FilteredImageSource(sprite.getSource(), new CropImageFilter(160*j, 120*i, 160,
120)));
          k++;
         }} }

Je travaille avec la librairie
standard(jre1.6.0_07) et plus particulièrement swing...(pas d'applet)
C
dernier jour j'ai pu m'apercevoir que le problème résidait au nv de la
transparence mais sans pouvoir y changer quoi que soit.(j'ai juste changé le
fond transparent en noir sur png-8, j ai pu donner un contour noir moins
pixelisé ou disons avec pixels moins visible).
Sinon pour ta dernière
question a part la classe composite trouvé ds la doc...(que je n ai jms utilisé
d ailleurs), avant que tu ne m en parle je n'avais jms entendu parler de
l'extension composite.
Merci pour ton aide
0
Utilisateur anonyme
1 oct. 2008 à 13:37
En fait, pour être sûr que le chargement soit synchrone, il serait préférable de faire new ImageIcon("image.png").getImage() mais ça ne suffira pas à régler le problème. Une solution de contournement serait de prendre des images au format GIF au lieu d'utiliser des images au format PNG. Si ça ne marche pas, ça nous donnera au moins des éléments de réponse pour savoir où chercher.

L'extension Composite dont je parlais n'avait rien à voir avec la classe Composite, j'aurais dû être plus précis. Sur certaines cartes graphiques, tu peux activer l'extension Composite pour gérer l'alpha; sur d'autres c'est fait par défaut, tu n'as pas à y penser.

Déjà, essaie avec des images au format GIF et dis-moi ce que ça donne. J'ai un bout de code (sous licence GPL) dans mon jeu qui charge correctement des PNG 24 bits et qui marche partout, tu pourras t'en inspirer.

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dvwyns
Messages postés
159
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
7 mai 2012

3 oct. 2008 à 22:36
Salut gouessej,
J ai essayé ce que tu m as proposé(new ImageIcon("image.png").getImage()), mais je ne vois pas de <>.(pour régler le problème de synchrone je comptais afficher un panel noir en avant plan, le temps d'afficher toutes mes animations ^^)
Sinon pour le gif, j'avais déja essayé et oui ça fonctionne aussi bien qu'avec les png-8 (ça reste tjs du 256 couleurs, et un nv alpha plus élémentaire j'imagine...  ).
J ai regardé sur ma carte graphique si l'extension Composite était activé, j ai rien trouvé. J'ai une Ati radeon 9600pro SE.
Merci encore pour ton aide.
0
Utilisateur anonyme
5 oct. 2008 à 19:54
Bonsoir

Je me demande si tu ne recharges pas certaines images à chaque fois. Appelles-tu initImTab() plusieurs fois? Sinon, il se peut que ton problème se règle en utilisant AWT plutôt que Swing, n'utilise ce dernier que si tu en as vraiment besoin et souvent, pour les jeux, on évite Swing car AWT supporte mieux l'accélération graphique que Swing. Essaie de lancer ton jeu avec une autre version de Java, par exemple le JDK 1.6 update 4, ça permettra de voir si c'est une régression de Java et non un bug de ton programme. Quant à ta carte graphique, elle supporte l'alpha correctement, j'ai moi-même une carte plus ancienne que la tienne (ATI Radeon 9250 Pro) et ça marche très bien.

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
0
dvwyns
Messages postés
159
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
7 mai 2012

7 oct. 2008 à 12:55
Salut,
je n'utilise initImTab() qu'a l'instanciation, en fait au démarrage de mon appli, je dois, par ex, charger mon vaisseau en l'animant pour qu'après toutes ses images apparaissent a tout les coups (j'espère que tu comprends ce que je veux dire). Sinon je pensais que Swing avait de meilleurs performances que AWT pour ce genre de projet (je pensais ça, pcq swing était plus récent ^^) en fait j'utilise un JPanel qui implémente runnable pour chaque(fin quasi) image a animer, setComponentZOrder() pour le rafraichissement chronologique des panels attachés au container.
Pour l'instant qd tout est chargé et que j'utilise des png-8 (ou gif), avec l'écran rempli d'enemi, je n'utilise que 10% du cpu, par contre avec les png-24 ça rame a mort
Je vais essayer une autre version de Java et jte tiens au courant.
0