ELCouz
Messages postés135Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention25 juillet 2008
-
29 mars 2008 à 07:24
ELCouz
Messages postés135Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention25 juillet 2008
-
31 mars 2008 à 22:49
Bonjour,
J'aimerais savoir quel formule je dois utiliser pour faire un effet realiste quand je click sur un bouton pour allonger la form en height ?
Es-ce que sa se pourais que sa soit logarithmique ? si je fait une loop avec une valeur fixe
example:
Loop 200 fois (pour allonger de 200 px par en bas)
form1.height := form1.height + 1
sleep(10);
fin loop
C'est trop lineaire ,, je veut mettre un peu deffet speciaux dans mon programme :)...
Je suis moyen en maths. Je ne sais pas quel formule mathematique pourrais me donner un resultat du type graviter ...
c-a-d accelerer en parabole et decelerer en parabole...
En tout cas, c'est une bible pour les effets réalistes, avec un flash pour tester rapidement, c'est le top.
A mon avis, c'est un effet quadratique qu'il te faut.
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20082 30 mars 2008 à 12:22
Code à utiliser :
var
T: Integer;
OrigH: Extended;
begin
OrigH := Height;
for T := 0 to MaxT do
begin
Height := easeInOutQuad(T, OrigH, +100, MaxT);
Sleep(10);
end;
OrigH := Height;
for T := 0 to MaxT do
begin
Height := easeInOutQuad(T, OrigH, -100, MaxT);
Sleep(10);
end;
end;
Donc :
t = temps actuel, si tu n'as pas de timer tu utilises alors ton index de boucle !! (comme dans le code ci-dessus)
b = valeur de départ, donc Height
c = changement, donc +50 si tu veux augmenter Height de 50 ou -50 si tu veux le diminuer de 50 pixels !
d = temps total, pareil, sans timer tu mets l'index total de la boucle.
Pour la traduction :
t /t/2 > t := t / (d / 2.0);
t-- ==> t := t - 1.0;
ELCouz
Messages postés135Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention25 juillet 2008 31 mars 2008 à 22:35
wow merci ... j'ai du regler quelque petit probleme mais le code marche bien...
voila le resultat pour les interesser !
procedure TForm1.Button1Click(Sender: TObject);
var
T,MaxT,OrigH: Integer;
begin
MaxT := 100;
OrigH := form1.Height;
for T := 0 to MaxT do
begin
form1.Height := easeInOutQuad(T, OrigH, 200, MaxT);
Sleep(10);
end;
end;
function TForm1.easeInOutQuad(ti,bi,ci,di:integer):integer;
var
t,b,c,d:single;
begin
t:=ti;
b:=bi;
c:=ci;
d:=di;
t := t / (d / 2.0);
if t < 1 then result:= round(c/2*t*t + b)
else
begin
t := t - 1.0;
result:= round(-c/2 * (t*(t-2) - 1) + b);
end;
end;
Delphi se plaignais pour la conversion integer vers extended... je lui ai regler sa assez vite son probleme
j'ai utiliser des singles a place moins precis mais de toute facon form1.height ne prend que des integers donc a la fin jarrondi le tout :)
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 29 mars 2008 à 13:25
Salut cousin,
j'sais pas si ça fait un truc parabolique, mais ça m'étonnerait (en tout cas, c'est simple):
var i : Integer;
begin
for i := 1 to 14 do begin
form1.Height := form1.Height +i;
sleep(10);
end;
for i := 14 downto 1 do begin
form1.Height := form1.Height +i;
sleep(10);
end;
Vous n’avez pas trouvé la réponse que vous recherchez ?
ELCouz
Messages postés135Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention25 juillet 2008 29 mars 2008 à 22:00
oui tu a raison , c'est leffet quadratique !
le seul hic c'est que oui je sais comment adapter partiellement la formule pour delphi...
Math.easeInOutQuad = function (t, b, c, d) {
t /= d/2;
if (t < 1) return c/2*t*t + b;
t--;
return -c/2 * (t*(t-2) - 1) + b;
};
t = temps --> ?? comment je procede sous delphi , il ny a pas de frames ni temps comme dans une animation flash!
b = valeur depart dans scas si le height original dla form
c = «change in value» ce qui veut dire ? a combien jveu arriver metton form height maximale ? ou plus le chiffre est haut plus sa va incrementer plus vite???
d = le temps que sa dure ... encore la... un petit coup de main svp
ELCouz
Messages postés135Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention25 juillet 2008 31 mars 2008 à 22:49
Pour les debutants qui ne veulent pas se cassé la tete le code et avoir un example concret... je vous ai fait un petit demo avec bouton qui decide de la direction a prendre (monter ou descendre selon letat).