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

VB.NET Discussion :

Mini jeu, Graphic, Picturebox


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    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
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    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 régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    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 éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    On peut définir des PictureBox non rectangulaires (exemple de code en C#) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    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 régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    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 régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Août 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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.

Discussions similaires

  1. [Ludique] Mini-jeu : déchiffrage de code (niveau facile)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/07/2010, 18h24
  2. Mini jeu avec quelques bugs
    Par fouedou77 dans le forum C
    Réponses: 12
    Dernier message: 27/06/2009, 09h07
  3. [68000] Création mini-jeu
    Par Hiike dans le forum Autres architectures
    Réponses: 0
    Dernier message: 13/04/2009, 20h21
  4. Mini jeu de rôle en php
    Par Sh4dow49 dans le forum Projets
    Réponses: 5
    Dernier message: 23/10/2008, 16h08
  5. mini jeu en construction (débutant)
    Par samy100 dans le forum C
    Réponses: 45
    Dernier message: 23/04/2006, 23h36

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