Comment faire un jeu a grater ?

Résolu
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009 - 15 sept. 2005 à 13:39
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009 - 16 sept. 2005 à 18:04
je voudrai faire un jeu a grater mais pour que la première image s'efface quand on clique sur la souris et qu'on passe sur l'image je ne sais pas comment je pourrais faire (je ne suis que débutant) merci de m'aider.

14 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 sept. 2005 à 15:03
Ben si t'as compris le principe, tu n'aura pas de grande difficulté à l'implémenter :



Dans une Picture1 : tu charge ton image de gain

Dans une Picture2 : tu charge ton image de motif de grattage grattage

Dans une Picture3 : tu affiche le résultat



Dans le Picture3_MouseMove, tu intercepte les événements souris, par exemple :



Picture2.Circle (X, Y), 10, vbBlue

Set Picture3.Picture = Picture1.Picture

Call TransparentBlt(Picture3.hdc,
0,0,Picture3.ScaleWidth, Picture3.ScaleHeight, Picture2.hdc,
0,0,picture2.scalewidth, picture2.scaleheight, vbblue)



Voilà, j'ai pas essayé, mais ca doit ressembler à quelque chose comme cà.

A améliorer question performances, mais ca dois déjà te donner une piste à suivre.

Il faut bien sûr que ta form, ainsi que les picturebox soient en pixels et non en twips pour que l'API puisse fonctionner !




_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 sept. 2005 à 14:07
salut
superpose des images. OnClick, l'image devient invisible ;)
PCPT
0
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009
15 sept. 2005 à 14:09
sa j'y avais pensé mais j'veux que mon image s'éfface petit à petit suivant la où la souris passe.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 sept. 2005 à 14:20
Et bien utilise la fonction de l'API Windows TransparentBlt pour rendre certaines parties de ton image de grattage invisble :



Tu mets une image en arrière plan (l'image du gain)

Tu mets une imageen avant plan (l'image du motif à gratter).



Ensuite, tu intercepte les événements souris (MouseMove) pour définir
la zone à afficher, et tu rend cette zone uniforme (par exemple en
appelant la fonction Circle de VB) en utilisant une couleur bien
spécifique qui sera la couleur de transparence de TransparentBlt.



(il faut bien entendu mettre d'abord l'image du gain, puis afficher
l'image du grattage par dessus en appelant TransparentBlt !).

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 sept. 2005 à 14:21
alors fait des animations Flash, tu gagneras du temps.
charge ensuite tes animation dans des Objets ShockWave superposés au-dessus de tes images finales.
PCPT
0
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009
15 sept. 2005 à 14:45
Je fait sur visual basic c'est pour aprendre c'est pas un projet qui va s'utiliser mais darksidious est-ce que vous pourier me donner un exemple svp j'ai compris le principe de base mais comment l'utiliser je ne sais pas merci.
0
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009
15 sept. 2005 à 19:07
J'ai essayé mais il m'affiche 1 erreur pour Call TransparentBlt que la private sub ou function n'existe pas.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 sept. 2005 à 19:21
Tu as déjà utilisé des fonctions de l'API Windows ?



Il faut les déclarer avant de pouvoir s'en servir, dans ton cas, place ceci dans la partie déclaration de ta feuille :

Private Declare Function TransparentBlt Lib "msimg32.dll" ( _

ByVal hdc As Long, _

ByVal x As Long, _

ByVal y As Long, _

ByVal nWidth As Long, _

ByVal nHeight As Long, _

ByVal hSrcDC As Long, _

ByVal xSrc As Long, _

ByVal ySrc As Long, _

ByVal nSrcWidth As Long, _

ByVal nSrcHeight As Long, _

ByVal crTransparent As Long) As Long

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009
15 sept. 2005 à 19:24
non j'ai jamais utiliser je suis débutant j'utilise visual basic depuis pas tres lontemp merci de votre aide.
0
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009
15 sept. 2005 à 19:32
merci le programe fonctionne mais il y a un probleme c'est que quand la souris bouge sur le picture 3 y a les rond transparent qui se trace mais pendant le mouvement on voit directemen l'image de derrière.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 sept. 2005 à 20:06
Bon voici une version qui marche très bien :

Private Declare Function TransparentBlt Lib "msimg32.dll" ( _

ByVal hdc As Long, _

ByVal x As Long, _

ByVal y As Long, _

ByVal nWidth As Long, _

ByVal nHeight As Long, _

ByVal hSrcDC As Long, _

ByVal xSrc As Long, _

ByVal ySrc As Long, _

ByVal nSrcWidth As Long, _

ByVal nSrcHeight As Long, _

ByVal crTransparent As Long) As Long



Private Declare Function CreateSolidBrush Lib "gdi32.dll" ( _

ByVal crColor As Long) As Long



Private Declare Function CreatePen Lib "gdi32.dll" ( _

ByVal nPenStyle As Long, _

ByVal nWidth As Long, _

ByVal crColor As Long) As Long



Private Declare Function SelectObject Lib "gdi32.dll" ( _

ByVal hdc As Long, _

ByVal hObject As Long) As Long



Private Declare Function Ellipse Lib "gdi32.dll" ( _

ByVal hdc As Long, _

ByVal X1 As Long, _

ByVal Y1 As Long, _

ByVal X2 As Long, _

ByVal Y2 As Long) As Long





Private Sub Picture3_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)



Dim lBrush As Long

Dim lPen As Long



If Not Picture3.AutoRedraw Then Let Picture3.AutoRedraw = True

If lBrush = 0 Then



Let lBrush = CreateSolidBrush(vbBlue)

Call SelectObject(Picture2.hdc, lBrush)



End If



If lPen = 0 Then



Let lPen = CreatePen(0, 1, vbBlue)

Call SelectObject(Picture2.hdc, lPen)



End If



Call Ellipse(Picture2.hdc, x - 10, y - 10, x + 10, y + 10)

Set Picture3.Picture = Picture1.Picture

Call TransparentBlt(Picture3.hdc, 0, 0,
Picture3.ScaleWidth, Picture3.ScaleHeight, Picture2.hdc, 0, 0,
Picture2.ScaleWidth, Picture2.ScaleHeight, vbBlue)



End Sub


_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009
15 sept. 2005 à 20:12
oui merci sa marche beaucoup mieu mais je sais que je vais etre chian mais pour que sa marche il faut que les 3 pictures soit dans la fenetre tendis qu'il me faut que la 3eme d'afficher.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 sept. 2005 à 20:58
Oui tout à fait, si tu connaissais un peu mieux l'API Windows, je
t'aurais fait passer par des DC temporaires plutôt que de passer par
des PictureBoxes (c'est juste une question d'optimisation, et de
minimisation des ressources graphiques). Mais pour un petit programme,
ce code suffit déjà.

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
thedragon25 Messages postés 67 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 3 mai 2009
16 sept. 2005 à 18:04
Comment je pourrais passer par des DC temporaire ?
0
Rejoignez-nous