Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Membre du Club
    Homme Profil pro Guillaume Guillaume
    Inscrit en
    novembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume Guillaume
    Localisation : France

    Informations forums :
    Inscription : novembre 2011
    Messages : 108
    Points : 40
    Points
    40

    Par défaut Mini jeu, Graphic, Picturebox

    Bonjour, je suis en train de faire un petit jeu sans prétention en VB.net.

    Comme montré sur l'image jointe, j'utilise une seul picturebox pour afficher 241 pièce en isométrique. A la base je voulais mettre une picturebox par élément cela me permet de savoir quand l'utilisateur clique sur une picturebox. Mais il y avais un problème de transparence car les pièces sont posée les une sur les autres.

    Donc via l'objet Graphic je dessine tous les élément sur un unique picturebox.

    Maintenant le problème c'est que je ne peux pas savoir quand l'utilisateur clique sur un élément en sachant qu'il y aura encore beaucoup d'autre élément les un sur les autres.

    J'ai pensé à utiliser les coordonnées de la souris mais c'est vraiment le bordel car les pièce sont les une sur les autres et il peux y avoir 4 à 5 étages donc quasiment les mêmes coordonnées pour 4, 5 pièces.

    Si une personne à une idée pour ce problème je suis preneur

    Merci d'avance.
    Images attachées Images attachées

  2. #2
    Membre actif
    Profil pro Michel Devaux
    Inscrit en
    janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Nom : Michel Devaux

    Informations forums :
    Inscription : janvier 2010
    Messages : 104
    Points : 196
    Points
    196

    Par défaut

    Perso, je créerais une classe clsPiece intégrant l'image (et éventuellement un masque pour gérer le clic dans le cas de pièces non rectangulaires et/ou évidées), la taille, la position,...

    Le jeu comporterait donc une List(of clsPiece) s'affichant dans un picturebox ou directement sur le formulaire.
    La List(of Piece) gèrerait l'ordre d'affichage des pièces.

    Au clic, on vérifierait quelle clsPiece est concernée, on la déplacerait en tête de liste à l'intérieur de List(of clsPiece) et on gèrerait son déplacement.

  3. #3
    Membre du Club
    Homme Profil pro Guillaume Guillaume
    Inscrit en
    novembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume Guillaume
    Localisation : France

    Informations forums :
    Inscription : novembre 2011
    Messages : 108
    Points : 40
    Points
    40

    Par défaut

    C'est exactement se que j'ai fait mais pour le gestion des cliques sur une pièce précise sa reste presque impossible sachant que plusieurs pièces peuvent avoir quasiment la même position.

    Je pense quand même utiliser des picturebox... Pour deux raisons la première, pas de problème au niveau de l'evenement clique. La 2eme raison c'est quand l"utilisateur fera une modification il y aura seulement une picturebox a mettre a jour au lieu de redessiner l'image entière qui peut comporter 500,600 élément.

    Déjà avec 241 pièces j'ai un lapse de temps pour que sa ré affiche l'image.

  4. #4
    Expert Confirmé Sénior Avatar de Graffito
    Inscrit en
    janvier 2006
    Messages
    5 834
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 5 834
    Points : 7 543
    Points
    7 543

    Par défaut

    On peut définir des PictureBox non rectangulaires (exemple de code en C#) :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    using System;using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;
     
    var gp = new GraphicsPath() ;
    gp.AddEllipse(new Rectangle(0, 0, MyPictureBox.Width-1, MPictureBox.Height-1));
    MyPictureBox.Region = new Region(gp);
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre du Club
    Homme Profil pro Guillaume Guillaume
    Inscrit en
    novembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume Guillaume
    Localisation : France

    Informations forums :
    Inscription : novembre 2011
    Messages : 108
    Points : 40
    Points
    40

    Par défaut

    Merci graffito pour ta réponse. J'ai essayé l'idée est bonne mais le résultat n'est pas terrible.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    Dim gp As New Drawing2D.GraphicsPath
    gp.AddLine(0, 19, 31, 0)
    gp.AddLine(0, 20, 0, 34)
    gp.AddLine(1, 35, 31, 53)
    gp.AddLine(32, 53, 63, 34)
    gp.AddLine(63, 33, 63, 20)
    gp.AddLine(63, 19, 32, 0)
    lstTuile(i).Img.Region = New Region(gp)
    Images attachées Images attachées

  6. #6
    Expert Confirmé Sénior Avatar de Graffito
    Inscrit en
    janvier 2006
    Messages
    5 834
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 5 834
    Points : 7 543
    Points
    7 543

    Par défaut

    Il me semble que les pointillés sont dus au fait que les régions ne sont pas exactement contigües. C'est peut-être dû au fait que tu n'utilises pas exactement les mêmes points (à un pixel près) pour les extrémités des segments dans les AddLine.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Membre du Club
    Homme Profil pro Guillaume Guillaume
    Inscrit en
    novembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume Guillaume
    Localisation : France

    Informations forums :
    Inscription : novembre 2011
    Messages : 108
    Points : 40
    Points
    40

    Par défaut

    Avec cette méthode, je ne pense pas faire mieux que ça. J'ai bien repris les lignes avec les positions X,Y via paint.

    Tu peux essayer sur un projet avec un picturebox (et une image avec) et un button :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim gp As New Drawing2D.GraphicsPath
                gp.AddLine(0, 19, 0, 34)
                gp.AddLine(1, 35, 31, 53)
                gp.AddLine(32, 53, 62, 35)
                gp.AddLine(63, 34, 63, 19)
                gp.AddLine(62, 18, 32, 0)
                gp.AddLine(31, 0, 1, 18)
            PictureBox1.Region = New Region(gp)
        End Sub
    Images attachées Images attachées

  8. #8
    Membre du Club
    Homme Profil pro Guillaume Guillaume
    Inscrit en
    novembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume Guillaume
    Localisation : France

    Informations forums :
    Inscription : novembre 2011
    Messages : 108
    Points : 40
    Points
    40

    Par défaut

    Bon, le problème a mon avis ne viens pas du code mais des images... En effet, mes tuiles de base dessiné avec inkscape je pouvais me permettre d’orienter les arrêtes dans l'angle que je voulais sans avoir l'impression que sa "bouffe" la forme.

    GDI de VB.net, lui dessine comme paint je doit donc bien orienter les arrêtes comme montré sous l'image jointe (en noir les arrêtes bien orienté).

    Inkscape, Photoshop.... eux pour un trait de 1 pixel, il vont faire un trait de 3 pixel avec une couleur plus clair pour les traits de l'extérieur afin de tromper l'oeil.
    Images attachées Images attachées

  9. #9
    Membre du Club
    Homme Profil pro Guillaume Guillaume
    Inscrit en
    novembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume Guillaume
    Localisation : France

    Informations forums :
    Inscription : novembre 2011
    Messages : 108
    Points : 40
    Points
    40

    Par défaut

    Voila, j'ai donc refait les tuiles avec paint.

    Voici le résultat ci-joint en utilisant 1 picturebox par élément. Impécable merci Graffito.
    Images attachées Images attachées

  10. #10
    Invité de passage
    Homme Profil pro
    Développeur amateur
    Inscrit en
    août 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : août 2014
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Création d'un jeu en 2D iso

    Bonjour Guyome41.

    Le post est assez vieux.
    J'espère que tu as pu mener ton projet à terme.

    Je maitrise assez bien Visual basic. J'ai réalisé quelques applis à usage perso.

    Aujourd'hui, je souhaiterai faire un jeu en 2D iso.
    Je débute sur le sujet. Je lis beaucoup de post et de tuto,quasiment tous en C (# ou ++), en java sous SDL, Open GL et autres.

    Peu de chose en VB.net.

    Je comptais afficher mes tuiles (déjà en 2D iso) dans une picturebox. C'est là que ton post m'intéresse.

    Peux-tu me donner des conseils pour me mettre le pied à l'étrier?

    Merci d'avance.

    JLS12

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •