Deplacement d'une image

Résolu
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 - 18 mars 2007 à 21:53
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 - 19 mars 2007 à 21:37
Salut,

je realise en ce moment un jeu de pion. Pour dessiner les pions, pas de soucis. Par contre pour deplacer un pion, je fais un refresh du panel ou je dessine mes pions et je dessine la nouvelle place de mon pion. Cela marche mais c'est pas très joli (on voit le damier clignoter un bref instant). En plus, maintenant j'aimerai pouvoir deplacer le pion avec ma souris. (mouse.move).

Alors savez vous comment effacer mon pion sans redessiner tout le jeu?

Merci d'avance.

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!

6 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
19 mars 2007 à 10:27
redessine uniquement les zones qui changent...
quand tu appelles Invalidate, tu peux lui passer un rectange !

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
3
nicolasToulouse Messages postés 31 Date d'inscription mercredi 14 juin 2006 Statut Membre Dernière intervention 11 janvier 2008
19 mars 2007 à 16:43
Oui, tu peux egalement mettre cela :

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

Ce qui aura pour effet d'eviter les flicks normalement ;)

Une autre astuce pour eviter trop de temps à dessiner, est de dessiner
ton background dans une image.. et de "reconstruire" ce background uniquement
quand il a changé.. (je veux dire, en dehors d'objet surposé par dessus)

Exemple : Un jeu de pacman, tu pourrais avoir une matrice decrivant ton plateau
de jeu (un code de la matrice associé à une bitmap) , et au lieu, dans le paint
de redessiner chaque élément, tu peux avoir "claquer" ta représentation dans une bitmap

En fait, il faut que t'essaye de voir comment tu peux minimser les actions de dessins ;)

The Monz Toulouse
3
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
19 mars 2007 à 21:37
Bon c'est encore moi.

Ca y'est grace à votre aide ça marche impec:
void Panel1MouseDown(object sender
, MouseEventArgs e
)

{

move
= true ;

}

void Panel1MouseMove(object sender
, MouseEventArgs e
)

{

if(move
)

{

this
.panel1
.Invalidate(old_position
);

new_position
=new Rectangle(e
.X
,e
.Y
,this
.panel1
.Width
/8,panel1
.Height
/8);

old_position
= new_position
;

}

}

void Panel1MouseUp (object sender
, MouseEventArgs e
)

{

move
=false;

}

void Panel1Paint(object sender
, PaintEventArgs e
)

{

graph
.DrawImage(pcs
,new_position
,0,0,pcs
.Width
,pcs
.Height
,GraphicsUnit
.Pixel
,imageAttr
);

old_position
=new_position
;

}

Merci à vous 2

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
3
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
19 mars 2007 à 17:30
Merci the Monz, je vais y reflechir. J'ai essayé la methode Sebmafate mais j'ai du raté quelque chose car ma piece ne s'efface pas:

void Panel1MouseDown(object sender
, MouseEventArgs e
)

{

move
= true ;

}

void Panel1MouseUp(object sender
, MouseEventArgs e
)

{

move
=false;

}

void Panel1MouseMove(object sender
, MouseEventArgs e
)

{

this
.label1
.Text
"e.X"+e
.X
+" e.Y="+e
.Y
+" move="+move
;

if (move
)

{

this
.panel1
.Invalidate(old_position
);

Image pcs
=Image
.FromFile("D:\\Nico\\Divers\\SharpDevelop_projects\\Test\\b_white.bmp");

ImageAttributes imageAttr
= new ImageAttributes ();

imageAttr
.SetColorKey(Color
.Red
,Color
.Red
);

this
.panel1
.Invalidate(this
.old_position
);

Rectangle new_position
=new Rectangle(e
.X
,e
.Y
,pcs
.Width
,pcs
.Height
);

graph
.DrawImage(pcs
,new_position
,0,0,pcs
.Width
,pcs
.Height
,GraphicsUnit
.Pixel
,imageAttr
);

this
.old_position
=this
.new_position
;

}

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
0

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

Posez votre question
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
19 mars 2007 à 20:36
The monz,

après reflexion je ne suis pas sur d'avoir tout compris.
En fait j'ai un panel auquel j'associe une image de background et ensuite j'ai une matrice comportant l'emplacement de toutes mes pieces.
Dans ma function paint de mon panel je redessine toutes les pieces de mon jeu. Le background lui n'a jamais besoin d'être redessiné.

Donc à priori je fais déjà ce qui tu suggeres, correct?

Merci de votre aide!!!

Nico

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
0
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
19 mars 2007 à 21:22
Bon finalement pour invalidate ça marche, j'ai résolu mon probleme. Le seul truc c'est que invalidate efface la plupart de ma nouvelle image
en fait le invalidate semble être effectué après que j'ai redessiné ma nouvelle image.

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
0
Rejoignez-nous