Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Comment faire une animation fluide, sans scintillements? | |
| | Auteur | Message |
---|
d.j.peters
Nombre de messages : 77 Age : 60 Localisation : Germany Date d'inscription : 31/07/2010
| Sujet: Comment faire une animation fluide, sans scintillements? Jeu 19 Aoû 2010 - 18:02 | |
| Comment faire une animation fluide, sans scintillements? Je vous remercie DJ - Code:
-
' based on idea of an cubic spline ' X = x0*(1-u)^3 + x1*3*u*(1-u)^2 + x2*3*u^2*(1-u) + x3*u^3 ' Y = y0*(1-u)^3 + y1*3*u*(1-u)^2 + y2*3*u^2*(1-u) + y3*u^3
' code label Resize,Calc,Draw,SetBars ' events label TimerEvent,hBarChange,vBarChange label OptionClick0,OptionClick1,OptionClick2,OptionClick3
' objects dim frmMain%:frmMain% = 0 dim picMain%:picMain% = 1 dim tmrMain%:tmrMain% = 2 dim grpOptions%:grpOptions% = 3 dim optP%(3),hBar%,vBar%
' vars dim OldWidth% ,OldHeight% dim FormWidth% ,FormHeight% dim ClientWidth%,ClientHeight% dim i%,j%,id%,CurrentPoint%,u,MustReDraw% dim xx(100),yy(100),xA(100),yA(100),xB(100),yB(100),xC(100),yC(100) dim xAB(100),yAB(100),xBC(100),yBC(100) dim x01,y01 ,x12,y12 ,x23,y23 dim xd10,yd10,xd21,yd21,xd32,yd32 dim x(3),y(3),xd(2),yd(2)
caption frmMain%,"Cubic Spline"
picture picMain% full_space picMain% 2d_target_is picMain% print_target_is picMain% 2d_clear
container_option grpOptions%:caption grpOptions%,"Move:" for i%=0 to 3 id%=grpOptions%+1+i%:optP%(i%)=id% option id%:parent id%,grpOptions%:caption id%,"Point " + str$(i%) next i% mark_on optP%(0)
hBar%=grpOptions%+5 track_bar hBar%:horizontal hBar% vBar%=hBar%+1 track_bar vBar%:vertical vBar%
timer tmrMain% timer_interval tmrMain%,1000
' events on_click optP%(0),OptionClick0 on_click optP%(1),OptionClick1 on_click optP%(2),OptionClick2 on_click optP%(3),OptionClick3 on_change hBar%,hBarChange on_change vBar%,vBarChange on_timer tmrMain%,TimerEvent
gosub Resize x(0)= 10 :y(0)= 10 x(1)= 20 :y(1)= height(picMain%)-30 x(2)= width(picMain%)-40:y(2)= height(picMain%)-30 x(3)= width(picMain%)-20:y(3)= 10 position hBar%,x(CurrentPoint%)*0.1 position vBar%,y(CurrentPoint%)*0.1
' go in main eventloop end
' get client width and height of FORM frmMain% ' don't allow a window shorter then 320x200 Resize: full_space picMain% ClientWidth% = width(picMain%) while ClientWidth%<320 FormWidth% = FormWidth%+1 width frmMain%,FormWidth% full_space picMain% ClientWidth% = width(picMain%) end_while left picMain%,0:width picMain%,ClientWidth%-48 OldWidth%=FormWidth%
ClientHeight% = height(picMain%) while ClientHeight%<200 FormHeight% = FormHeight%+1 height frmMain%,FormHeight% full_space picMain% ClientHeight% = height(picMain%) end_while height picMain%,ClientHeight%-106 OldHeight%=FormHeight%
' bars left vBar%,ClientWidth%-48:top vBar%,0:height vBar%,height(picMain%) min vBar%,0:max vBar%,height(picMain%)*0.1 left hBar%,0:top hBar%,height(picMain%):width hBar%,width(picMain%) min hBar%,0:max hBar%,width(picMain%)*0.1 ' options top grpOptions%,height(picMain%)+48 width grpOptions%,width(picMain%) height grpOptions%,52 for i%=0 to 3 id%=optP%(i%) left id%,10+i%*60:top id%,16:width id%,60 next i% return
Calc: ' get deltas from current points for i%=0 to 2 xd(i%)=x(i%+1)-x(i%):yd(i%)=y(i%+1)-y(i%) next i% i%=0 ' get spline points for u=0 to 1 step 0.01 xA(i%) = x(0)+u*xd(0) : yA(i%) = y(0)+u*yd(0) xB(i%) = x(1)+u*xd(1) : yB(i%) = y(1)+u*yd(1) xC(i%) = x(2)+u*xd(2) : yC(i%) = y(2)+u*yd(2) xAB(i%) = xA(i%)+u*( xB(i%)- xA(i%)): yAB(i%) = yA(i%)+u*( yB(i%)- yA(i%)) xBC(i%) = xB(i%)+u*( xC(i%)- xB(i%)): yBC(i%) = yB(i%)+u*( yC(i%)- yB(i%)) xx(i%) = xAB(i%)+u*(xBC(i%)-xAB(i%)): yy(i%) = yAB(i%)+u*(yBC(i%)-yAB(i%)) i%=i%+1 next u MustReDraw%=1 return Draw: for i%=0 to 99 2d_clear ' draw the text of the 4 points for j% = 0 to 3 print_locate x(j%),y(j%):print "P"+str$(j%) next j% ' draw the 4 points via lines 2d_pen_color 0,0,168 2d_pen_width 2 2d_poly_from x(0),y(0) for j% = 1 to 3 2d_poly_to x(j%),y(j%) next j% ' draw moving lines 2d_pen_color 0,168,0 2d_poly_from xA(i%),yA(i%) 2d_poly_to xB(i%),yB(i%) 2d_poly_to xC(i%),yC(i%) 2d_circle xA(i%),yA(i%),3 2d_circle xB(i%),yB(i%),3 2d_circle xC(i%),yC(i%),3
2d_pen_color 0,0,168 2d_poly_from xAB(i%),yAB(i%) 2d_poly_to xBC(i%),yBC(i%) 2d_circle xAB(i%),yAB(i%),3 2d_circle xBC(i%),yBC(i%),3
' draw the cubic spline if i%>0 2d_pen_color 168,0,0 2d_poly_from xx(0),yy(0) for j% = 1 to i% 2d_poly_to xx(j%),yy(j%) next j% 2d_circle xx(i%),yy(i%),3 end_if wait 10 ' display next i% MustReDraw%=0 return
' events TimerEvent: timer_off tmrMain% FormWidth% = width(frmMain%) FormHeight% = height(frmMain%) if (FormWidth%<>OldWidth%) or (FormHeight%<>OldHeight%) gosub Resize MustReDraw%=1 end_if if (MustReDraw%=1) gosub Draw end_if timer_on tmrMain% return
OptionClick0: CurrentPoint%=0:goto SetBars OptionClick1: CurrentPoint%=1:goto SetBars OptionClick2: CurrentPoint%=2:goto SetBars OptionClick3: CurrentPoint%=3:goto SetBars
hBarChange: x(CurrentPoint%)=position(hBar%)*10:goto Calc vBarChange: y(CurrentPoint%)=position(vBar%)*10:goto Calc
SetBars: position hBar%,x(CurrentPoint%)*0.1 position vBar%,y(CurrentPoint%)*0.1 return | |
| | | Invité Invité
| Sujet: Re: Comment faire une animation fluide, sans scintillements? Jeu 19 Aoû 2010 - 19:14 | |
| une nette amélioration avec les moyens du bord. - Code:
-
' based on idea of an cubic spline ' X = x0*(1-u)^3 + x1*3*u*(1-u)^2 + x2*3*u^2*(1-u) + x3*u^3 ' Y = y0*(1-u)^3 + y1*3*u*(1-u)^2 + y2*3*u^2*(1-u) + y3*u^3
' code label Resize,Calc,Draw,SetBars ' events label TimerEvent,hBarChange,vBarChange label OptionClick0,OptionClick1,OptionClick2,OptionClick3
' objects dim frmMain%:frmMain% = 0 dim picMain%:picMain% = 1 dim tmrMain%:tmrMain% = 2 dim grpOptions%:grpOptions% = 3 dim optP%(3),hBar%,vBar%
' vars dim OldWidth% ,OldHeight% dim FormWidth% ,FormHeight% dim ClientWidth%,ClientHeight% dim i%,j%,id%,CurrentPoint%,u,MustReDraw% dim xx(100),yy(100),xA(100),yA(100),xB(100),yB(100),xC(100),yC(100) dim xAB(100),yAB(100),xBC(100),yBC(100) dim x01,y01 ,x12,y12 ,x23,y23 dim xd10,yd10,xd21,yd21,xd32,yd32 dim x(3),y(3),xd(2),yd(2) dim f$ :' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ f$="1.bmp" :' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +++
caption frmMain%,"Cubic Spline" picture 10 :full_space 10 picture picMain% full_space picMain% 2d_target_is picMain% print_target_is picMain% 2d_clear
container_option grpOptions%:caption grpOptions%,"Move:" for i%=0 to 3 id%=grpOptions%+1+i%:optP%(i%)=id% option id%:parent id%,grpOptions%:caption id%,"Point " + str$(i%) next i% mark_on optP%(0)
hBar%=grpOptions%+5 track_bar hBar%:horizontal hBar% vBar%=hBar%+1 track_bar vBar%:vertical vBar%
timer tmrMain% timer_interval tmrMain%,1000
' events on_click optP%(0),OptionClick0 on_click optP%(1),OptionClick1 on_click optP%(2),OptionClick2 on_click optP%(3),OptionClick3 on_change hBar%,hBarChange on_change vBar%,vBarChange on_timer tmrMain%,TimerEvent
gosub Resize x(0)= 10 :y(0)= 10 x(1)= 20 :y(1)= height(picMain%)-30 x(2)= width(picMain%)-40:y(2)= height(picMain%)-30 x(3)= width(picMain%)-20:y(3)= 10 position hBar%,x(CurrentPoint%)*0.1 position vBar%,y(CurrentPoint%)*0.1
' go in main eventloop END:' **
' get client width and height of FORM frmMain% ' don't allow a window shorter then 320x200 Resize: full_space picMain% ClientWidth% = width(picMain%) while ClientWidth%<320 FormWidth% = FormWidth%+1 width frmMain%,FormWidth% full_space picMain% ClientWidth% = width(picMain%) end_while left picMain%,0:width picMain%,ClientWidth%-48 OldWidth%=FormWidth%
ClientHeight% = height(picMain%) while ClientHeight%<200 FormHeight% = FormHeight%+1 height frmMain%,FormHeight% full_space picMain% ClientHeight% = height(picMain%) end_while height picMain%,ClientHeight%-106 OldHeight%=FormHeight%
' bars left vBar%,ClientWidth%-48:top vBar%,0:height vBar%,height(picMain%) min vBar%,0:max vBar%,height(picMain%)*0.1 left hBar%,0:top hBar%,height(picMain%):width hBar%,width(picMain%) min hBar%,0:max hBar%,width(picMain%)*0.1 ' options top grpOptions%,height(picMain%)+48 width grpOptions%,width(picMain%) height grpOptions%,52 for i%=0 to 3 id%=optP%(i%) left id%,10+i%*60:top id%,16:width id%,60 next i% return
Calc: ' get deltas from current points for i%=0 to 2 xd(i%)=x(i%+1)-x(i%):yd(i%)=y(i%+1)-y(i%) next i% i%=0 ' get spline points for u=0 to 1 step 0.01 xA(i%) = x(0)+u*xd(0) : yA(i%) = y(0)+u*yd(0) xB(i%) = x(1)+u*xd(1) : yB(i%) = y(1)+u*yd(1) xC(i%) = x(2)+u*xd(2) : yC(i%) = y(2)+u*yd(2) xAB(i%) = xA(i%)+u*( xB(i%)- xA(i%)): yAB(i%) = yA(i%)+u*( yB(i%)- yA(i%)) xBC(i%) = xB(i%)+u*( xC(i%)- xB(i%)): yBC(i%) = yB(i%)+u*( yC(i%)- yB(i%)) xx(i%) = xAB(i%)+u*(xBC(i%)-xAB(i%)): yy(i%) = yAB(i%)+u*(yBC(i%)-yAB(i%)) i%=i%+1 next u MustReDraw%=1 return
Draw:
for i%=0 to 99 file_save picMain%,f$ :' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ sehen_Sie file_load 10,f$ : hide picMain% :show 10 :' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 2d_clear ' draw the text of the 4 points for j% = 0 to 3 print_locate x(j%),y(j%):print "P"+str$(j%) next j% ' draw the 4 points via lines 2d_pen_color 0,0,168 2d_pen_width 2 2d_poly_from x(0),y(0) for j% = 1 to 3 2d_poly_to x(j%),y(j%) next j% ' draw moving lines 2d_pen_color 0,168,0 2d_poly_from xA(i%),yA(i%) 2d_poly_to xB(i%),yB(i%) 2d_poly_to xC(i%),yC(i%) 2d_circle xA(i%),yA(i%),3 2d_circle xB(i%),yB(i%),3 2d_circle xC(i%),yC(i%),3
2d_pen_color 0,0,168 2d_poly_from xAB(i%),yAB(i%) 2d_poly_to xBC(i%),yBC(i%) 2d_circle xAB(i%),yAB(i%),3 2d_circle xBC(i%),yBC(i%),3
' draw the cubic spline if i%>0 2d_pen_color 168,0,0 2d_poly_from xx(0),yy(0) for j% = 1 to i% 2d_poly_to xx(j%),yy(j%) next j% 2d_circle xx(i%),yy(i%),3 end_if wait 10 ' display
show picMain% : hide 10 :' hier !!!!!!!!!!!! next i% MustReDraw%=0
return
' events TimerEvent: timer_off tmrMain% FormWidth% = width(frmMain%) FormHeight% = height(frmMain%) if (FormWidth%<>OldWidth%) or (FormHeight%<>OldHeight%) gosub Resize MustReDraw%=1 end_if if (MustReDraw%=1) gosub Draw end_if timer_on tmrMain% return
OptionClick0: CurrentPoint%=0:goto SetBars OptionClick1: CurrentPoint%=1:goto SetBars OptionClick2: CurrentPoint%=2:goto SetBars OptionClick3: CurrentPoint%=3:goto SetBars
hBarChange: x(CurrentPoint%)=position(hBar%)*10:goto Calc vBarChange: y(CurrentPoint%)=position(vBar%)*10:goto Calc
SetBars: position hBar%,x(CurrentPoint%)*0.1 position vBar%,y(CurrentPoint%)*0.1 return |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Comment faire une animation fluide, sans scintillements? Jeu 19 Aoû 2010 - 23:25 | |
| La modif de cosmos70 fonctionne encore mieux si on utilise un RAMDISK, pour stocker le bmp... Par contre je ne sais pas pourquoi mais le programme au bout d'un moment (5 / 10 mn) se bloque... On a beau sélectionner les points ou les trackbars, il n'y a plus d'évènements...
| |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Jeu 19 Aoû 2010 - 23:50 | |
| | |
| | | Invité Invité
| Sujet: Re: Comment faire une animation fluide, sans scintillements? Sam 21 Aoû 2010 - 9:30 | |
| Pour ce qui est des blocages, au bout d'un moment, je pense qu'il y a saturation de la mémoire. Dans mon programme en cours, je sollicite beaucoup celle-ci, j'arrive à formater une page entière d'un picture d'un texte en 1 à 2 secondes. Mais plus j'avance dans les pages (avec les même pictures), plus cela devient lent. Au bout de 8/10 pages, il faut 5/10 secondes pour l'écrire.
Il manque pour moi une fonction de garbage. Dans d'autre basic, j'utilisais je crois: fre(0) pour faire le nettoyage.
Ici tu dis que tu utilise un disque virtuel. Est-ce qu'il n'ait pas à saturation, à un certain moment? |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Comment faire une animation fluide, sans scintillements? Sam 21 Aoû 2010 - 15:44 | |
| @cosmos70 Je ne sais pas trop. L'idée du ramdisk m'est venu lorsque j'ai essayé ta modif du prog et que j'ai vu la loupiote de mon disque dur clignoter à fond la caisse. Je me suis dis que pour limiter les temps d'accès, il vallait mieux passer par un ramdisk. L'image sauvegardée dedans fait toujours la même taille...donc je ne vois pas ce que tu veux dire par saturation du ramdisk... Quand au blocage, il est possible que cela provienne lors de plusieurs lancements successif du programme (est-ce de cela dont tu parles?). Je n'ai pas vérifié l'état de la mémoire lorsque tout à bloqué. je n'ai que 512Mo de RAM. Maintenant que tu parles de problème de libération de mémoire, je ferai plus attention si jamais cela se reproduit. J'ai déjà eu des messages du genre "Impossible de lancer panoramic.exe" lorsque je cliquai sur F9... c'est peut être lié tout ça...
| |
| | | Invité Invité
| Sujet: Re: Comment faire une animation fluide, sans scintillements? Sam 21 Aoû 2010 - 16:22 | |
| Je pense pouvoir te dire que cela est du à cela. J'ai RamBoost XP d'installé, et à chaque fois que j'ai eu ce message, en cliquant trop vite sans regarder, l'icône était au rouge, et c'est impardonnable, on perd tout. Moi aussi j'ai pas plus de mémoire! |
| | | Contenu sponsorisé
| Sujet: Re: Comment faire une animation fluide, sans scintillements? | |
| |
| | | | Comment faire une animation fluide, sans scintillements? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |