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

[Java] Affichage passif vs actif

DarK-Killer-57
DarK-Killer-57
Niveau 7
15 février 2016 à 14:49:37

Bonjour,

Dans le cadre d'un TP en Java où l'on me fournit le code d'une application graphique, je dois remplacer l'affichage passif actuel par un affichage actif. Cependant, même en faisant des recherches et pour le peu d'informations que j'ai trouvé, je ne vois pas la différence en termes de code.

Apparemment avec l'affichage passif, le rendu est effectué par l'OS où c'est lui qui redessine quand c'est nécessaire et fait l'appel à paint() tout seul après que le programmeur est fait l'appel à repaint() lors de la mise à jour. En affichage actif, le rendu est fait dans un boucle où on a le total contrôle sur ce qui doit être redessiné.

Globalement j'ai 2 classes :
- un modèle avec un run() qui contient l'appel à setChanged() et notifyObservers().
- une vue avec un update() qui contient l'appel à repaint() qui lui-même fait appel à paint() que je redéfinis et qui dessine les éléments graphiques de l'application.

La seule chose que j'ai compris pour le moment, c'est qu'à la place de faire appel à repaint() dans la mise à jour, je fais appel à une fonction myRenderingLoop() par exemple que je crée et qui doit contenir quelque chose comme ça d'après la documentation :

public void myRenderingLoop() {
    while (!done) {
        Graphics myGraphics = getPaintGraphics();
        // Draw as appropriate using myGraphics
        myGraphics.dispose();
    }
}

et où le contenu de la fonction devrait être le même que celui que je faisais dans paint(). En bref, j'ai pas trop compris comment ça marche... Quelqu'un pourrait-il m'expliquer en clair et également me donner un petit exemple d'implémentation de code que je devrais faire car je ne comprends pas :(

Bunyan
Bunyan
Niveau 17
15 février 2016 à 16:15:34

Première fois que je rencontre ces termes.
Je serai aussi intéressé par une définition.

godrik
godrik
Niveau 30
15 février 2016 à 17:03:39

je n'ai jamais entendu ces termes pour parler de ces deux modes d'affichages. mais en fait je n'ai jamais entendu de nom poir ces deux modes. donc c'est peut etre leur vrai nom.

en general en passif, le systeme (ici awt certainement) a un thread qui fait attention a ce qu'il faut redessinner. et qui appelle paint/repaint comme il faut. je n'ai aucune idee de comment desactiver ce mecanism.

RogerLeCaillou
RogerLeCaillou
Niveau 10
15 février 2016 à 17:32:03

Pareil, j'ai jamais entendu parler d'affichage actif/passif. Peut-être que le "actif" fait référence à une boucle infinie qui va appeler le repaint toutes les x millisecondes (avec attente active donc) et que le "passif" fait référence à un mécanisme d'observers ? Ça me parait plus vraisemblable comme explication que "paint manuel/paint par l'OS" car je pense pas que cette nuance existe en Java

DarK-Killer-57
DarK-Killer-57
Niveau 7
15 février 2016 à 18:59:44

Je vois pas comment une boucle infinie fonctionnerait en fait, malgré que ce soit comme ça apparemment que l'affichage actif se fait... je ne comprends tout simplement pas.

godrik
godrik
Niveau 30
15 février 2016 à 20:11:13

Dark-killer, c'est fait comme ca dnas les jeux video single thread. Tu as basiquement une boucle infini qui fait

while (1) {
  gather_input();
  update_physics();
  render();
}

En general c'etait un tout petit plus inteligent pour gerer le frame rate et cie. Mais la base est la. Apres comment integrer cette idee dans la boucle d'affichage de awt, aucune idee.

DarK-Killer-57
DarK-Killer-57
Niveau 7
15 février 2016 à 21:04:52

Je pense tout simplement qu'un affichage actif n'est défini que par le fait que l'appel à repaint() (qui elle-même appelle update() pour effacer les composants actuels et qui elle-même appelle paint() pour dessiner les nouveaux composants) ne se fasse pas à chaque tour de boucle et qu'il n'y a pas de façon type d'implémentation de la nouvelle méthode myRenderingLoop() que j'ai crée.

En d'autres termes je redéfinis bien moi-même la méthode d'affichage des composants, bien que la nouvelle méthode écrite contienne la même chose que paint() initialement utilisée, à la différence qu'il faille en plus appeler explicitement une méthode qui efface les composants, une substitution à update().

Merci tout de même de vos réponses :)

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