Deplacement d'une image [Résolu]

Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
- - Dernière réponse : cs_thebigboss
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
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!!!!!!!!!
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
3
Merci
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]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebmafate
Messages postés
31
Date d'inscription
mercredi 14 juin 2006
Dernière intervention
11 janvier 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nicolasToulouse
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
2
3
Merci
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!!!!!!!!!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_thebigboss
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
2
0
Merci
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!!!!!!!!!
Commenter la réponse de cs_thebigboss
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
2
0
Merci
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!!!!!!!!!
Commenter la réponse de cs_thebigboss
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
2
0
Merci
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!!!!!!!!!
Commenter la réponse de cs_thebigboss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.