BALLE REBONDISSANTE

fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016 - 13 oct. 2006 à 09:48
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 15 oct. 2006 à 17:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39900-balle-rebondissante

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
15 oct. 2006 à 17:43
ah aussi, tu n'etais pas vraiment obligé de separé l'animation de la balle dans une unité a part.
a moins que tu crée un objet Balle qui peut etre utilisé dans n'importe quel canvas.
ce qui serait deja plus interressant d'un point de vue technique.
Dam_neo Messages postés 5 Date d'inscription jeudi 2 juin 2005 Statut Membre Dernière intervention 16 octobre 2006
14 oct. 2006 à 12:03
Merci beaucoup F0XI pour tout ces conseils d'optimisation. Ca m'a appris pleins de choses. :)
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
14 oct. 2006 à 08:36
ou voir encore l'outil DEPOC qui est specialisé dans le nettoyage des projets Delphi.

sinon passont au choses serieuse :

TCoord est un plagia tu type TPoint ... donc inutile de reinventer ce qui existe :

TPoint = record X,Y : integer end;

qui vas avec la fontion Point(X,Y : integer) : TPoint


ensuite, un truc que tu vas trouver pratique : With ... Do
qui permet d'eviter cela :
form1.Image1.Canvas.Pen.Color:=clblue;
form1.Image1.Canvas.Brush.Color:=clblue;
form1.Image1.Canvas.Ellipse(balle.coo_haut.x,balle.coo_haut.y,balle.coo_bas.x,balle.coo_bas.y);

en le transformant en cela :

with form1.Image1.Canvas do begin
Pen.Color:=clblue;
Brush.Color:=clblue;
Ellipse(balle.coo_haut.x,balle.coo_haut.y,balle.coo_bas.x,balle.coo_bas.y);
end;

encore un autre truc que tu vas apprecier :
TPaintBox au lieu de TImage. Timage est plus lourd que TPaintBox est n'est pas initialement prevus pour l'animation.


un inverseur booleen, qui reduit considerablement cette procedure :

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key = vk_space then begin
Timer1.Enabled := not Timer1.Enabled;
end;

et pour finir on augmente les performances :

const
RTD : extended = 180/Pi;

procedure deplacer_balle(var balle : Tballe);
var DDG : extended;
PST,PCT : integer;
begin
with form1.Image1.Canvas do begin
Brush.Color := clWhite;
FillRect(Image1.ClientRect);
end;

with Balle do begin
DDG := direction * RTD;
PST := round( Vitesse * cos(DDG) );
PCT := round( Vitesse * sin(DDG) );
coo_haut := point( coo_haut.x+PCT, coo_haut.y+PST);
coo_bas := point( coo_bas.x+PCT, coo_bas.y+PST);
end;
controler_sortie(balle);
end;
Dam_neo Messages postés 5 Date d'inscription jeudi 2 juin 2005 Statut Membre Dernière intervention 16 octobre 2006
13 oct. 2006 à 21:02
C'était mon premier projet que je postais ici. Dites moi svp quels sont les fichiers à mettre dans mon zip afin que je ne gaffe plus ;) Merci d'avance.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
13 oct. 2006 à 14:44
Les Fichiers *.* ne sont pas utiles dans le zip.
fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
13 oct. 2006 à 09:48
Les Fichiers bak et les unités compilées ne sont utiles dans le zip (*.~PAS;*.DCU;*.~DPR)
Rejoignez-nous