Dessiner des gif a volonté

djnaoki Messages postés 23 Date d'inscription samedi 17 novembre 2012 Statut Membre Dernière intervention 18 juin 2015 - 30 déc. 2013 à 14:03
djnaoki Messages postés 23 Date d'inscription samedi 17 novembre 2012 Statut Membre Dernière intervention 18 juin 2015 - 31 déc. 2013 à 14:30
salut, je code ne ce moment un petit jeu seulement la je suis heurter a un problème... je voudrais pourvoir dessiner des GIF a l'infini (j'ai trouver un code qui fait ca) mais le problème c'est que je voudrais en plus de ca pouvoir déplacer chacun d'eux séparément et aussi pouvoir faire sorte que mes gif soit pas tous les mêmes

mon code (un peu brouillon) :
Public Class Form1
Dim count As Integer
Dim rec As datarectangle
Private currentlyAnimating As Boolean = False
Public mort(5) As Bitmap
Public Sub AnimateImage()

If Not currentlyAnimating Then

ImageAnimator.Animate(mort(0), New EventHandler(AddressOf Me.OnFrameChanged))
ImageAnimator.Animate(mort(1), New EventHandler(AddressOf Me.OnFrameChanged))
currentlyAnimating = True
End If
End Sub
Private Sub OnFrameChanged(ByVal o As Object, ByVal e As EventArgs)

'Force a call to the Paint event handler.
Me.Invalidate()
End Sub
Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

AnimateImage()
ImageAnimator.UpdateFrames()

e.Graphics.DrawImage(mort(0), 0, 0)
e.Graphics.DrawImage(mort(1), 0, 0)
If count > 0 Then
DrawRectangle(e.Graphics, count)
End If
End Sub


#Region "RECTANGLES"
Private Class datarectangle
Public left As Integer
Public top As Integer
Public width As Integer
Public height As Integer


'tu peux ajouter le brush pour remplir le rectangle
Public thepen As System.Drawing.Brush
'le constructeur
Public Sub New(ByVal leftrect As Integer, ByVal toprect As Integer, ByVal widthrect As Integer, ByVal heightrect As Integer, ByVal penrect As System.Drawing.Brush)
left = leftrect
top = toprect
width = widthrect
height = heightrect
thepen = penrect
End Sub
End Class
Private listdatarectangle As New List(Of datarectangle)

Private Sub DrawRectangle(ByRef gr As System.Drawing.Graphics, ByVal count As Integer)
For iter = 0 To count - 1
gr.DrawImage(mort(0), listdatarectangle(iter).left, listdatarectangle(iter).top)
'gr.FillRectangle(listdatarectangle(iter).thepen, listdatarectangle(iter).left, listdatarectangle(iter).top, listdatarectangle(iter).width, listdatarectangle(iter).height)

Next
End Sub

#End Region



Private Sub Form1_Click(sender As System.Object, e As System.EventArgs) Handles MyBase.Click
rec = New datarectangle(Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y, 50, 50, Brushes.Black)
listdatarectangle.Add(rec)
count += 1
Me.Refresh()
End Sub

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
mort(0) = New Bitmap("C:\Users\DJ Naoki\Documents\vb\client jeu\client jeu\bin\Debug\gamedata\GIF\mort.gif")
mort(1) = New Bitmap("C:\Users\DJ Naoki\Documents\vb\client jeu\client jeu\bin\Debug\gamedata\GIF\piece.gif")
End Sub
End Class

merci

2 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
30 déc. 2013 à 16:43
Bonjour

Pas si brouillon que ça, j'ai vu pire...

2 choses:
1- pouvoir déplacer un GIF
Il faut utiliser les évènements "mousexxx" et non plus le Form_Click
L'idée étant de déterminer si au moment du MouseDown le curseur se trouve dans un GIF ou pas, s'il l'est alors if faudra déplacer ce GIF, si non on peut en créer un nouveau
il te faut une nouvelle propriété (Rectangle) dans ton objet datarectangle qui servira à déterminer si le click se trouve dans l'image ou non
ex :
Private Class datarectangle
...
ReadOnly Property rectangle As Rectangle
  Get
    Return New Rectangle(left, top, width, height)
  End Get
End Property
...

ensuite dans la class Form1 on défini un membre pour mémoriser si un GIF a été sélectionné et dans le gestionnaire d'évènement Form1_MouseDown on test
exemple:
Dim SelectedDatarectangle As datarectangle

Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
    SelectedDatarectangle = Nothing
    For Each datarectangle As datarectangle In listdatarectangle
        If (datarectangle.rectangle.Contains(e.Location)) Then SelectedDatarectangle = datarectangle
    Next
End Sub

Dans le gestionnaire d'évènements Form1_MouseMove si un GIF est sélectionné on le déplace
exemple
Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove
    If (Not SelectedDatarectangle Is Nothing) Then
        SelectedDatarectangle.Location = e.Location
    End If
End Sub

Dans le gestionnaire d'évènement Form1_MouseUp si un GIF est sélectionné on ne fait rien, si non on en crée un nouveau (c'est ton code original)
attention, penser à remettre SelectedDatarectangle = Nothing en fin du Form1_MouseUp pour annuler la sélection en cours

2-Choisir son image
Là il faut ajouter un propriété Image à ton objet datarectangle
Lorsque tu crées un nouvel élément affiche un boite de dialog (OpenFileDialog) pour sélectionner l'image et affecte là à l'élément.
c'est cette image que tu devras dessiner dans la fonction DrawRectangle

0
djnaoki Messages postés 23 Date d'inscription samedi 17 novembre 2012 Statut Membre Dernière intervention 18 juin 2015
Modifié par djnaoki le 30/12/2013 à 21:29
merci !
dsl je ne t'ai rien expliquer >< en faite l'idée c'est que les gifs sont animés et en faite le chemin d'Access du gif est dans un fichier map le drawrectangle sert de hitbox et le déplacement ce fait par des variables géré par le jeu
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
31 déc. 2013 à 10:59
Bonjour

Désolé mais je ne comprend pas ce que tu veux dire.
0
djnaoki Messages postés 23 Date d'inscription samedi 17 novembre 2012 Statut Membre Dernière intervention 18 juin 2015
31 déc. 2013 à 14:30
en faite ces gif animé serons les ennemies donc il doivent avoir une hit box et c'est le jeu qui les déplacera
merci
0
Rejoignez-nous