VB/VB.Net MapViewer

  • Auteur de la discussion Anonymous
  • Date de début
A

Anonymous

Invité
#1
Bonsoir,

j'ai créer un petit MapViewer, et tout fonctionne très très bien, nombre de carreau, gestion de cases ect...
Le seul problème vient de la forme des cases de ma grille. Je n'arrive pas à reproduire celle de dofus.

Voilà ce que sa donne avec les cases en noires pour mieux que vous voyez :


Comme vous le constater ce tableau ressemble à tout sauf la map de dofus :x .
Voilà les propriétées de ma grille:

Dim ind As Integer

For y As Integer = 0 To 39
For x As Integer = 0 To 13
ind = 14 * y + x
mat(ind) = New node(ind, x, y)
P(ind) = New pic
P(ind).p = New PictureBox
P(ind).p.Left = 5 + x * 20
P(ind).p.Top = 5 + y * 20
P(ind).p.Height = 19
P(ind).p.Width = 19
P(ind).p.BackColor = Color.Black
P(ind).p.BorderStyle = BorderStyle.FixedSingle
P(ind).index = ind
Me.Controls.Add(P(ind).p)
Next
Next

Un peu d'aide ?
Je ne vous cache pas que je me suis aidé de sources sur internet.
 
A

Anonymous

Invité
#2
Peut-être pourrai-tu avoir une seul pictureBox pour la map, ce serai pas mal.

Puis tu pourrais utiliser l'objet "Polygon" qui va permettre de dessiner un losange.
 
A

Anonymous

Invité
#3
Dans ce cas la autant prendre une image de la map vierge non ?

Mais apres si je fais une seul picture box comment je ferais pour colorier les cases ?
 
A

Anonymous

Invité
#4
On peu dessiner un polygon de la couleur que l'on souhaite.
(un polygon = une cellule de la map)
 
A

Anonymous

Invité
#5
Humm je vois sa demain...
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#6
'fabrication d'un bitmap
Public b As Bitmap = New Bitmap(930, 742)
'création de l'outil de dessin
Public g As Graphics = Graphics.FromImage(b)
Code:
Public Sub DrawPolygon(ByVal centre As Point, ByVal couleur As Color)
        Dim brush = New SolidBrush(couleur)
        Dim points(3) As Point
        points(0) = New Point(centre.X, centre.Y - 18)
        points(1) = New Point(centre.X + 32, centre.Y)
        points(2) = New Point(centre.X, centre.Y + 18)
        points(3) = New Point(centre.X - 32, centre.Y)
        ' dessiner le polygone 
        g.FillPolygon(brush, points)
        g.DrawPolygon(Pens.White, points)

    End Sub
Dim centre As New Point(x, y)
Dim couleur As Color = Color.Green

DrawPolygon(centre, couleur) 'on en dessine 1 dans le Bitmap
DrawPolygon(centre2, couleur2) 'on en dessine 2 dans le Bitmap

'mise en picturebox
PictureBox_.Image = b.Clone 'on affiche le Bitmap
 
Inscrit
16 Aout 2011
Messages
184
Reactions
0
#7
Ca sert à positionner le personnage sur la map ?
 
A

Anonymous

Invité
#8
Merci ToOnS je test sa ce soir.

@ anodu : Non, c'est pour avoir un aperçu de la map
 
A

Anonymous

Invité
#9
La technique de dessiner des polygones est loin d’être bêtes mais comment je peux activé des évènements quand je me retrouve avec sa ? (Par exemple lorsque la souris passe sur une cellule)

 
A

Anonymous

Invité
#10
J'ai un algo en tête j'arrive :D
 
A

Anonymous

Invité
#11
C'est une question que je me suis également posé lors du début du dev' du MMO sur lequel je travaille en se moment (signature), en effet, c'est assez complexe.
La solution que j'avais choisi était de diviser les losange en deux triangle rectangle et ensuite je cherchais dans quel triangle parmi tout ce de toute les cellule contenait le click de la sourit.
Si besoin, je peux déterrer un vieux code en c#
 
A

Anonymous

Invité
#12
Sa m’intéresse oui ! :) Vraiment pas bête comme technique :)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#13
mdr maxilia ca me rapelle une petite soirée ca
 
A

Anonymous

Invité
#14
Merci ToOnS pour ton sub, sa ma bien aidé.

Voilà ce que sa donne maintenant:

For y As Integer = 0 To 39
For x As Integer = 0 To 13
Dim picture_ As New PictureBox
Dim centre As New Point(30, 30)
Dim couleur As Color = Color.DarkGray

DrawPolygon(centre, couleur)
DrawPolygon(centre, couleur)

'propriétées
picture_.Left = 5 + x * 30
picture_.Top = 5 + y * 30
Me.Controls.Add(picture_)
'On rempli la picturebox
picture_.Image = b.Clone
Next
Next



j'ai mes 28 cases de haute en bas mais que pour une seule rangée... et puis je ne peux pas rapprocher mes picturebox car vu qu'elles sont en carré sa va couper une partie des autre cellules.

Voilà
si vous pouvez m'aider
 
Inscrit
21 Janvier 2012
Messages
39
Reactions
0
#15
Bof bof dessiner à chaques fois les cases, autant dessiner plusieurs polygones dans la même picture box. Pour le clic de la souris, il "suffit" de vérifier si la souris se trouve bien dans un polygone, en regardant les bords.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#16
oui je vais repeter ce qui a deja ete dit 2 fois , il faut une seule picturebox (comme thefalcon)
 
A

Anonymous

Invité
#17
D'accord, je voulais dessiner a chaque fois chaque cellule en choisissant la couleur celons les données de la map.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#18
ben oui , y'a pas de probleme tu as "couleur" pour ca
 
A

Anonymous

Invité
#19
Phito a dit:
en regardant les bords.
C'est bien jolie de regardé les bords, mais il sont en diagonal donc je galère toujours :/
 
Inscrit
21 Janvier 2012
Messages
39
Reactions
0
#20
Suffit de faire un petit algo relativement simple.
 
Haut Bas