IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Eclaircissement sur MVC & repaint(x,y,w,h)


Sujet :

2D Java

  1. #1
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut Eclaircissement sur MVC & repaint(x,y,w,h)
    Bonjour à tous,

    J'aimerais avoir votre avis sur un dilemme qui me perturbe.
    Mise en condition :
    Mise en place MVC pour un jeu 2D, la vue affiche le joueur et récupère les évènement clavier, le controlleur passe les évènements au modèle.
    Et le modèle regarde les collisions et modifie les paramètres du joueur en conséquence (posX, posY, vitesse,...)

    Ce que j'ai fais :
    1/ J'ai fais une classe unique joueur avec plein d'argument (posX, image, vitesse,état,...)
    Le modèle et la vue partage la même instance de joueur.
    2/ J'ai fais 3 classes différentes pour joueur :
    pour le modèle : (posX, posY,vitesse,...)
    pour la vue : (posX,poyY,image,...)
    et une classe joueurIntermédiaire pour faire les modifications d'évènements entre le modèle et le joueur.

    Ma question : le 2/ parait plus propre pour le modèle MVC que le 1/, mais ça devient illisible avec 3 classes qui veulent dire à peut-être la même chose.
    Donc lequel choisir??

    ---
    Une autre question qui me perturbe aussi : le repaint(x,y,w,h);
    Es ce qu'il suffit d'appeler la méthode POINT FINAL, ou faut t'il faire un traitement (spécial?) dans le paintComponent(Graphics g)?

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Il faut un traitement spécial dans le paintComponent().
    Ce traitement consiste entre des calculs de collision/intersection entre la boite englobante de chacun de tes objets et la boite englobante (pour simplifier) du clip du Graphics passe en paramètre de la méthode. Cela permet d’accélérer le rendu en n'affichant que le strict minimum.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Ma question : le 2/ parait plus propre pour le modèle MVC que le 1/, mais ça devient illisible avec 3 classes qui veulent dire à peut-être la même chose.
    Donc lequel choisir??
    Ça revient à faire un choix entre la performance+montées en charge fréquente (solution2) et le confort de développent (solution1).

  4. #4
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Ça revient à faire un choix entre la performance+montées en charge fréquente (solution2) et le confort de développent (solution1).
    Merci pour la réponse, il ne m'en fallait pas plus, j'avais juste besoin d'être sure que le Modèle et la Vue pouvait partager une même ressources
    Que je ne fasse pas un truc trop dégueulasse
    Il faut un traitement spécial dans le paintComponent().
    Ce traitement consiste entre des calculs de collision/intersection entre la boite englobante de chacun de tes objets et la boite englobante (pour simplifier) du clip du Graphics passe en paramètre de la méthode. Cela permet d’accélérer le rendu en n'affichant que le strict minimum.
    La par contre je suis totalement pommé
    Serais ce possible de me faire un petit exemple du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void paintComponent(Graphics g){
    g.drawImage(monImageDeFond,0,0,200,200);//Mon image de fond
    g.drawImage(j.getImage(), j.posX,j.posY,j.largeur,j.hauteur);//Dessin de mon joueur. j= instance de Joueur
    }
    //Maintenant si j'appelle repaint 
    repaint(20,10,56,85);
    //Comment je le gère ci-dessus?
    Merci à vous deux

  5. #5
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Salut,

    Citation Envoyé par Ivelios Voir le message
    [/code]Merci à vous deux
    avec plaisir

    Citation Envoyé par Ivelios Voir le message
    //Maintenant si j'appelle repaint
    repaint(20,10,56,85);
    //Comment je le gère ci-dessus?
    A mon sens, un repaint qui prend en paramètre la zone de mise à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    repaint(j.posX,j.posY,j.largeur,j.hauteur);

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    @slim_java : Je pense qu'il parle plutôt de l'implémentation de paintComponent()

    @Ivelios : Il faut récupérer le "ClipBounds" de ton Graphics, qui comporte la zone à redessiner. Ainsi tu peux te contenter de repreindre uniquement cette zone.

    Par exemple pour le background cela donnerait grosso-modo ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        @Override
        protected void paintComponent(Graphics g) {
            Rectangle clip = g.getClipBounds();
            if (clip==null) {
                    /* Si on n'a pas de zone de clip, on prend tout le composant */
                    clip = getBounds();
            }
            /* position x/y en haut à gauche du rectangle à repeindre */
            int x = clip.x;
            int y = clip.y;
            /* position x/y en bas à droite du rectangle à repeindre */
            int dx = clip.x + clip.width;
            int dy = clip.y + clip.height;
     
            /* On repeint uniquement une partie de l'image : */
            g.drawImage(monImageDeFond, x, y, dx, dy, x, y, dx, dy, this);
    }

    Après pour le reste tu peux utiliser "clip.intersects()" pour déterminer si un éléments est à l’intérieur de la zone de clip ou non... afin de le dessiner ou non...


    a++

  7. #7
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Tout est plus clair maintenant
    Merci beaucoup pour les explications, je n'avais jamais vu ça auparavant (sur le net).

    Encore merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MVC] eclaircissement sur Spring MVC
    Par bertnane dans le forum Spring Web
    Réponses: 3
    Dernier message: 22/01/2010, 21h08
  2. [Versioning]Quels eclaircissements sur Dll/GAC/References?
    Par chnew dans le forum Framework .NET
    Réponses: 4
    Dernier message: 22/03/2006, 18h11
  3. [RegEx] Eclaircissement sur un formulaire
    Par inferno66667 dans le forum Langage
    Réponses: 11
    Dernier message: 03/12/2005, 17h55
  4. Réponses: 10
    Dernier message: 03/10/2005, 15h42
  5. [VB.NET] Eclaircissement sur la fonction IsDBNull
    Par shinchan dans le forum Windows Forms
    Réponses: 9
    Dernier message: 04/01/2005, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo