Deplacement d'une image

Résolu
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
-
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
-
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

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
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]
Messages postés
31
Date d'inscription
mercredi 14 juin 2006
Statut
Membre
Dernière intervention
11 janvier 2008

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
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
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!!!!!!!!!
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
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!!!!!!!!!
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
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!!!!!!!!!
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
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!!!!!!!!!