Deplacement d'une image [Résolu]

cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 18 mars 2007 à 21:53 - Dernière réponse : cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention
- 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
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 19 mars 2007 à 10:27
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]

Merci sebmafate 3

codes-sources a aidé 81 internautes ce mois-ci

Commenter la réponse de sebmafate
Meilleure réponse
nicolasToulouse 31 Messages postés mercredi 14 juin 2006Date d'inscription 11 janvier 2008 Dernière intervention - 19 mars 2007 à 16:43
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

Merci nicolasToulouse 3

codes-sources a aidé 81 internautes ce mois-ci

Commenter la réponse de nicolasToulouse
Meilleure réponse
cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 19 mars 2007 à 21:37
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!!!!!!!!!

Merci cs_thebigboss 3

codes-sources a aidé 81 internautes ce mois-ci

Commenter la réponse de cs_thebigboss
cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 19 mars 2007 à 17:30
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
cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 19 mars 2007 à 20:36
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
cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 19 mars 2007 à 21:22
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.