Comment faire des pieces de puzzle?

bennyD Messages postés 3 Date d'inscription lundi 14 mars 2005 Statut Membre Dernière intervention 15 mai 2005 - 14 mai 2005 à 18:50
catamenia Messages postés 119 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 21 juillet 2009 - 2 mars 2006 à 20:18
Bonjour cela fait des jours que je travaille sur un jeu de puzzle.
Mais j ai un probleme.
J aimerai mettre 2 piece l une a cote de l autre mais celle ci n etant pas carre j ai des probleme de transparence.J utilise une classe maison fait qui herite de control pour tout ce qui est click et otre gestion d event. je sais faire de la transparence mais la transparence ne semble pas s applique sur 2 image au meme niveau

piece1 piece2 http://membres.lycos.fr/darkbenny/rate.png' target='_blank'>ET VOILA LE RESULTAT L UNE a cote de l autre

donc voici ma question:

Comment faire pour que 2 image s entrelacent (la piece male dans la piece femelle souvenez vous de vos puzzle ravensberger) alors que c deux image sont au meme nivo ( dans le meme container ou fenetre)?

merci d avance

6 réponses

bennyD Messages postés 3 Date d'inscription lundi 14 mars 2005 Statut Membre Dernière intervention 15 mai 2005
14 mai 2005 à 18:51
OUPS voici le lien pour le rate
desole
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
15 mai 2005 à 05:20
Ouaip pas facile..


Si j'ai bien compris, tes images sont dans un control fait maison ( un peu comme une picture box, non ? ), tu utilises la fonction Bitmap.MakeTranparent( ) ? Difficile de repondre sans voir le code.. Meme l'enumeration "ControlStyles" ne devrait pas marcher dans ton cas.. Essaye de dessiner les controls dans l'odre inverse, celui du dessus avant celui du dessous, ou de les inseres dans ta forme dans l'ordre inverse..
0
bennyD Messages postés 3 Date d'inscription lundi 14 mars 2005 Statut Membre Dernière intervention 15 mai 2005
15 mai 2005 à 15:22
ok ben voici le code complet de mon control :)


using
System;


using
System.ComponentModel;


using
System.Drawing;


using
System.Windows.Forms;


namespace
moteur_2D


{



/// <summary>


///
Description of testcontrol.



/// </summary>



public
class testcontrol : System.Windows.Forms.UserControl


{



public
Bitmap myBitmap
;



private int stade= 0
;



private int stademax
;



public testcontrol(int n,string nom
)


{




//


// The InitializeComponent() call is required for Windows Forms designer support.


//


InitializeComponent
();




//


//
TODO
: Add constructor code after the InitializeComponent() call.


//


SetStyle
(ControlStyles.ResizeRedraw, true
);



// TODO
: this.Size =new System.Drawing.Size(myBitmap.Width,myBitmap.Height);



myBitmap= new Bitmap
(nom
);



this.Size =new
System.Drawing.Size
(myBitmap.Width/n,myBitmap.Height
);



Color backColor = myBitmap. GetPixel
(1, 1
);



myBitmap.MakeTransparent
(backColor
);



stademax =n
;


}




#region Windows Forms Designer generated code



/// <summary>


///
This method is required for Windows Forms designer support.



/// Do not change the method contents inside the source code editor. The Forms designer might



/// not be able to load this method if it was changed manually.



/// </summary>



private
void InitializeComponent
() {



//


// testcontrol


//


this.Name = "testcontrol"
;


}


protected
override void OnPaint
(PaintEventArgs pe
)


{


base.OnPaint
(pe
);



if
(stade<stademax-1
)


{


stade
++;


}


else



{



stade =0
;


}


pe.Graphics.DrawImage
(myBitmap,0,0,new Rectangle
(stade*myBitmap.Width/stademax,0,myBitmap.Width/stademax,97),GraphicsUnit.Pixel
);


}




#endregion




public
static bool Inside
(testcontrol sender,int
X,int
Y
)


{


Color backColor = sender.myBitmap. GetPixel
(1,1
);



Color pointColor = sender.myBitmap.GetPixel
(sender.stade*sender.myBitmap.Width/sender.stademax+X,Y
);



return !backColor.Equals
(pointColor
);


}


}


}

rien de tres particulier :)
sinon j utilise des png donc pas besoin de make transparence avec ;)
pour ce qui est de l affichage sur ma fenetre principale et bien je fais tout simplement un refresh
ne faite pas attention a maxstade ect c pour les animation :)
merci d avance
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
16 mai 2005 à 21:05
J'ai teste et j'avais le meme probleme, la solution que j'ai trouve c'est d'empecher le control de dessiner son background, pour ca tu peux redefinir sa fonction OnPaintBackground par exemple et ne rien faire dedans, mais ca ne suffisait pas, alors j'ajoute juste avant de dessiner la piece myControl.BringToFront( ) pour qu'elle soit dessinee au dessus des autres.


Fais les tests avec des bmps et remplace par les pngs si ca marche.


PS: Les coordonnees dans GetPixel c'est ( 1, 1 ) ou ( 0, 0 ) que tu voulais faire ?
0

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

Posez votre question
catamenia Messages postés 119 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 21 juillet 2009
2 mars 2006 à 19:39
donc on est obligé de créer son propre control en dérivant de picturebox?
pour redefinir la fonction on fait juste void OnPaintBackground() ou il y a des paramaitres a passer ?
0
catamenia Messages postés 119 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 21 juillet 2009
2 mars 2006 à 20:18
j'ai testé en mettant le control sur un autre control mai la place du background sa me dessine completement autre chose( des morceaux de controls que j'ai dans mon form)
0
Rejoignez-nous