Précédent   Forum du club des développeurs et IT Pro > Dotnet > Langages > VB.NET
VB.NET Forum d'entraide sur la programmation Visual Basic .NET. Avant de poster -> FAQ VB.NET, Articles VB.NET, Sources VB.NET
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 09h39   #1
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
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
Type de fichier : png iso.png (68,3 Ko, 22 affichages)
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 13h10   #2
mdevaux62
Membre actif
 
Michel Devaux
Inscription : janvier 2010
Messages : 102
Détails du profil
Informations personnelles :
Nom : Michel Devaux

Informations forums :
Inscription : janvier 2010
Messages : 102
Points : 181
Points : 181
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.
mdevaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 17h12   #3
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
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.
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 20h00   #4
Graffito
Expert Confirmé Sénior
 
Avatar de Graffito
 
Inscription : janvier 2006
Messages : 5 390
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 5 390
Points : 6 036
Points : 6 036
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
Graffito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 02h31   #5
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
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
Type de fichier : png g4710.png (44,1 Ko, 13 affichages)
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 14h09   #6
Graffito
Expert Confirmé Sénior
 
Avatar de Graffito
 
Inscription : janvier 2006
Messages : 5 390
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 5 390
Points : 6 036
Points : 6 036
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
Graffito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 20h10   #7
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
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
Type de fichier : png essai.png (48,8 Ko, 9 affichages)
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/01/2013, 21h02   #8
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
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
Type de fichier : png Forme parfaite.png (7,9 Ko, 9 affichages)
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2013, 00h35   #9
Guyome41
Nouveau Membre du Club
 
Homme Guillaume Guillaume
Inscription : novembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Guillaume
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 71
Points : 27
Points : 27
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
Type de fichier : png impec.png (60,6 Ko, 14 affichages)
Guyome41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h48.


 
 
 
 
Partenaires

Hébergement Web