CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

De SDL en C++ à swing en Java...

Malysz
Malysz
Niveau 6
16 mai 2012 à 19:23:11

Bonjour,

J'ai réalisé plusieurs petits jeu et programmes en c++ à l'aide de la librairie SDL.

Pour plusieurs raisons, il faut que je mette à en faire également en java. Je suis donc novice à la fois en java et à la fois en ce qui concerne la partie swing.

Voici mon problème :

Avec la SDL sous c++, si je voulais afficher deux fois la même image à des endroits différents de la fenêtre, ça se passait ainsi :

- déclaration de l'image (SDL_loadBmp)
- assignement de la première position de l'image
- on "colle" l'image avec SDL_blitSurface
- assignement de la deuxième position de l'image
- on colle à nouveau l'image
- on met à jour l'écran (la surface) avec SDL_Flip()

Cependant, dans java, avec swing, c'est pas trop la même manière de fonctionner :-(

Voilà ce que j'ai essayé de faire :

J'ai créé une classe CollerImage, qui possède les attributs posX,posY (ce sont deux int qui sont les coordonnées de l'image) ainsi que l'attribut ImFile (c'est un string qui contient le nom du fichier à charger). Voici la méthode paintComponent de cette classe :

public void paintComponent(Graphics g)
{
try {
Image img = ImageIO.read(new File(this.ImFile));
g.drawImage(img, posX, posY, this);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

J'ai une autre classe nommée Fenetre, dans laquelle je déclare un objet : CollerImage image = new CollerImage();

Je configure tout bien la fenetre en elle-même, sans oublier de la mettre visible (this.setVisible(true);) ainsi que (et ça je sais pas si c'est adéquat) this.setContentPane(image);

Ensuite, je colle une première fois l'image, en l'ayant bien configurée au préalable :

image.setImFile("test.bmp");
imname.setPosX(500);
imname.setPosY(500);
imname.repaint();

Ceci fonctionne, j'ai la bonne image qui se colle au bon endroit de l'écran.

Ensuite, si j'ajoute :

image.setImFile("test.bmp");
imname.setPosX(800);
imname.setPosY(800);
imname.repaint();

Seule la deuxième image est collée, la première est passée aux oubliettes.

Je sais que j'ai probablement rien compris, mais je sais aussi que j'ai suivi deux "cours" sur cette partie et passé deux jours à tenter de régler le problème :-(

Pouvez-vous m'aider?

Merci d'avance :ok:

godrik
godrik
Niveau 30
16 mai 2012 à 19:50:59

repaint ne fait pas ce que tu pense. Il appelle la fonction paint plus tard. image a l'air d'etre un composant de ta JFrame que tu deplace. Tu n'es pas entrain d'ecrire sur le buffer de ta JFrame.

Malysz
Malysz
Niveau 6
16 mai 2012 à 20:02:11

De ce que j'avais compris, repaint(A) fait l'effet de A.paintComponent(). C'est de ça que tu parles quand tu dis que repaint fait pas ce que je pense? Que fait-il vraiment dans ce cas?

" image a l'air d'etre un composant de ta JFrame que tu deplace."
==> c'est ce que je voudrais en tout cas^^ en fait ma classe fenetre hérite de JFrame. D'où les this.setVisible(true) et this.setContentPane(image) dont je parle dans mon premier post.

" Tu n'es pas entrain d'ecrire sur le buffer de ta JFrame."

==> Je comprend pas. Donc quand je fais image.repaint(), j'écris où alors?

P.S Je viens de voir que dans mon premier post, j'ai laissé "imname" à la place de "image" (mauvais copier/coller depuis mon code).

Malysz
Malysz
Niveau 6
16 mai 2012 à 23:08:08

J'en profite pour demander si il est possible de créer des applet, ou du moins d implanter des programmes sur navigateur, en utilisant la SFML pour java... Parce que la swing me déçoit beaucoup par rapport unau combo c++ SDL...

godrik
godrik
Niveau 30
16 mai 2012 à 23:17:36

swing, ce n'est pas fait pour faire des jeu... Tu peux utiliser la SDL en java il me semble.

Malysz
Malysz
Niveau 6
17 mai 2012 à 00:39:41

Je pensais l'utiliser mais elle a pas été mise à jour depuis 2002 et les ouï-dire sont pas très cools à son sujet.

Bunyan
Bunyan
Niveau 17
17 mai 2012 à 09:06:30

Swing est plutôt orienté logiciel application que jeu.
Je te conseil donc plutôt de trouver un bibliothèque orienté jeu.

tbop2
tbop2
Niveau 10
18 mai 2012 à 10:45:52

Sinon moi je recommande toujours Silk pour commencer la programmation des jeux en 2D sur Java, c'est très très simple et suffisament puissant pour faire ce que tu veux.

Pseudo supprimé
Pseudo supprimé 19 mai 2012 à 12:39:05

Par contre, il est parfaitement possible de faire des jeux avec Swing. J'avais fait un essai il y a 3-4 ans d'affichage massif de sprites en mouvement, j'avais environ 30fps avec plusieurs milliers de persos animés se déplaçant à l'écran. Swing est plus puissant et efficace qu'on pourrait le croire au premier regard. En plus, les primitives graphiques sont rendues depuis quelques années par celles de la carte graphique.
Après, c'est évident qu'il y a des trucs plus appropriés pour le jeu (LWJGL, slick, JOGL, etc). Mais pour un shooter ou un jeu de plateforme, voir un diablo-like, on peut s'en sortir avec Swing.

Pour OP, tu devrais déjà commencer par travailler avec des ImageBuffer, tu pourras plus efficacement les reproduire à différents endroits ou faire des transformations dessus.

Pseudo supprimé
Pseudo supprimé 20 mai 2012 à 04:39:25

http://zetcode.com/tutorials/javagamestutorial/

un bon exemple:
http://www.ludumdare.com/compo/ludum-dare-21/?action=preview&uid=398

FranckFuckedHer
FranckFuckedHer
Niveau 4
20 mai 2012 à 14:53:53

Une bibliothèque orientée jeu 2D pour Java ? Slick.

C'est un français qui développe ça, en plus.

Tu verras, si tu codais avec SDL, ça va te changer la vie. Tout le travail est prémaché.

En gros, t'as un système d'états de jeu déjà existant.
Chaque état a ses méthodes :
enter : appelée quand tu entres dans l'état.
update : pour mettre à jour la logique du jeu.
render : pour faire l'affichage.
leave : appelée quand tu sors de l'état.

Chaque état du jeu est un objet (par exemple l'état menu, l'état jeu, l'état pause, l'état gamover, ...) et tu passes d'un état à un autre en appelant une seule méthode de l'objet qui contient les états (le container).

Tout le système de Listener existe déjà, les transitions entre les états sont possible facilement (fondu, défilement, ...).

Enfin bref, c'est bien sympa à utiliser.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment