Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Szybkość animacji
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002
Szybkość animacji

Robię program w którym potrzebuję, żeby ramka Frame przesuwała się stopniowo poza obszar ekranu (taki bajer). Wykorzystuję do tego celu Timera. I teraz tak: Czy ktoś może wie co zrobić, żeby na komputerze z procesorem Pentium 3 GHz ta ramka chowała się z taką samą prędkością jak na Celeron 400 Mhz, a nie zasuwała jak dziki zając?

Za pomoc z góry dziękuję.


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


01-02-2005 15:21
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Hmmm -ciekawe - ja myślałem ze Timer to Timer minimalny intervał czasowy 55ms i nie wiem co to ma wspólnego z procesorem - to tak jakby na P133 zegar systemowy chodził tak, że następna sekunda pokazywałaby sie co 10 sekund


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

01-02-2005 19:10
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Viper87:
Może zamiast używać Timer (kontrolki), użyj funkcji Timer do odczekiwania, aż minie określony czas. Pamietaj tylko o tym, że około północy trzeba uważać, bo się zeruje .

DJK:
Nie rozumiem pytania...


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-02-2005 11:01
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Hmmmm - czy ja zadałem jakieś pytanie ?


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-02-2005 11:06
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

.. wypowiedzi...

A co do pytania VIpera jeszcze: możesz zwiększyć Interval do takiego, an którym Celeron400 będzie się wyrabiał.

[Post edytowany dnia 02-02-2005 11:29 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-02-2005 11:28
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Hmmm - może powtórze - co ma Intervał czasowy do procesora ??

[Post edytowany dnia 02-02-2005 12:03 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-02-2005 12:03
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

To, ze nie każdy procesor jest w stanie wyrobić się z wykonywaniem kodu. Np. Celeron taktowany zegarem 872MHz nie jest w stanie poradzić sobie z odstępami poniżej 30-40ms (na Win98, dla XP odpowiednio więcej). Poprostu kod jest wykonywany dłużej niż trwa odstęp określony przez Interval.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-02-2005 12:13
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Chodzi ci o coś takiego:


Procedura Timera

Inne procedury  -- interwał czasowy

Procedura Timera

??

Na wolnym procesorze u kolegi Vipera ramka się chowa tak jak on chce a na szybkim zasuwa.

Na szybszym procku Inne procedury - wykona się szybciej ALE interwał czasowy pozostaje taki sam.

Z tego wynika, że nie sam Timer jest tutaj bezużyteczny ale kod jest nieprawidłowo napisany.

A tak na marginesie w kontrolce Timer nie da się ustawić interwału mniejszego od 55 ms mimo iż nawet ustawisz go na 0 (tak naprawdę 1 sekunda to nie jest Interval = 1000 tylko 945)

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-02-2005 12:48
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Na komputerze szybki zasuwa, bo chodzi prawidłowo, natomiast na słabszym się nie wyrabia i dlatego chodzi wolno .


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-02-2005 13:03
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Coś mi się wydaje, że marcin_an może mieć rację z tym Interval. U mnie Interval jest ustawiony na 10 ms, a oto kod:


Private Sub hide_opt_Timer()
Frame1.Left = Frame1.Left - 250
cmdstart.Top = cmdstart.Top + 15
cmdmenu1.Top = cmdmenu1.Top + 15
If Frame1.Left = -12020 Then
...inne komendy...
End If


I teraz tak: na starym komputerze z Celeronem 400 Mhz chodzi OK, a na nowym kompie z Pentium 3 GhZ strasznie zasuwa. Czyli doradzasz zwiększyć Interval i sterować prędkością za pomocą szybkości "skoku"? Spróbuję.

Natomiast co to jest funkcja timer? Nie znam jej...

Ogólnie dzięki za pomoc i odezwę się czy sobie poradziłem :-).


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


02-02-2005 13:11
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Proponuję przetestować program na szybszym komputerze i tam dać odpowiednio niską prędkość. Celeron400 też powinien się wtedy wyrobić .
Mogę się mylic, ale warto przetestować.

Funkcja Timer zwraca wartość typu Double zawierajacą ilość sekund, które minęły od północy (ale zwraca je z ułamkami, czyli można mierzyć czasy krótsze od sekundy).

Ewentualnie można spróbować uzyć funkcji Sleep (WinAPI)... ona może opóźnić program o zadaną liczbę milisekund, ale podczas tego oczekiwania program jest całkowicie uśpiony .


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-02-2005 13:35
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

marcin_an nie rozumiesz mnie

Powiedzmy ze interwał ustawiam na 1 minutę - obojętnie na jakim kompie wszystkie inne procedury wykonają się w np. 30 sekund , to na obu kompach ramka będzie przesuwać się z tą samą prędkością.

Chodzi ci o to, że gdy inne procedury wykonywałyby się np. 1,5 minuty to rzeczywisty interwał nie byłby 1 minuta tylko 1,5.

Poza tym zwiększenie interwału zależy od tego co w ogóle jest wykonywane w czasie jego trwania - dla jednego zbioru procedur będzie działać OK a dla innego nie.

P.S. Spróbuj też pokombinować z DoEvents albo funkcjami z rodziny Thread

[Post edytowany dnia 02-02-2005 13:41 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-02-2005 13:40
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Ale przecież inne procedury nie mają wpływu na Timer, bo wystąpienie zdarzenia Timer powoduje wrzucenie aktualnego adresu na stos i rozpoczęcie wykonywania procedury obsługi zdarzenia Timer. Po jego wykonaniu program wraca dopiero do pozostałych procedur (albo do tej samej, jeśli się okarze, ze Timer jest wywoływany zbyt często).


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-02-2005 14:01
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Hmmm- najpierw piszesz ze komp nie wyrabia z wykonaniem kodu a teraz piszesz ze inne procedury nie mają wpływu na wystąpienie zdarzenia Timer. o_O

Moze mamy na myśli zupełnie inne procedury.

P.S. Mylisz się pisząc że inne procedury nie mają wpływu na wywołanie zdarzenia Timer - Timer jest uruchomiony dopiero gdy zakończy się inna procedura - w VB nie ma wątków - chyba że użyjemy DoEvents


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-02-2005 14:41
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Nie wyrabia się z wyrobieniem kodu obsługi zdarzenia Timer przed nastąpieniem następnego i dlatego opóźnia wystąpienie następnego wywołania tej procedury.

Tak, tutaj masz rację. VB rzeczywiście nie przerywa innej procedury - nie wiem, skąd mi sie to wzięło. Możliwe, że kiedyś miałem gdzies w kodzie wrzucone DoEvents i wtedy przerywał . Przyznaję rację.

Natomiast co do intervali:
Na szybszym procesorze zostaje wykonana procedura zdarzenia Timer i w tym momencie może być wykonana następna. Natomiast na słabszym - następne wywołanie procedury musi poczekać do momentu, gdy skończy się wykonywać poprzednia. Jeśli wykonuje sie dłużej niż jest ustawiony interval - czeka dłużej.
Problem nie występuje na szybszym procesorze, ale właśnie na wolniejszym, który się nie wyrabia i dlatego ramka przesuwa się wolniej niż wynikałoby to z ustawień interval'a i kodu.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-02-2005 14:54
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Natomiast na słabszym - następne wywołanie procedury musi poczekać do momentu, gdy skończy się wykonywać poprzednia. Jeśli wykonuje sie dłużej niż jest ustawiony interval - czeka dłużej.


No to wszystko jasne - tobie chodziło o wywołanie kolejnego zdarzenia Timer po zakończeniu poprzedniego.

Mi chodziło o procedury wykonujące się między wywołaniami Timer'a, które też mogą opóźniać ustawiony Timer jeżeli wykonywane są zbyt długo.


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-02-2005 15:05
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Nom... ale podejrzewam, że Viper takich nie ma . A jeśli ma, to niech naszpikuje je DoEventsami


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-02-2005 15:26
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004




_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-02-2005 15:31
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Ravender




Typ: neutral
Postów: 30
Zarejestrowany: Feb 2005


Hmmm - może powtórze - co ma Intervał czasowy do procesora ??


Ostatnio robilem jedna gre, w ktorej co 20ms zmienialo sie polozenie jednego picture'a (60x60 pikselki). U mnie na Athlonie 2400+ wszystko plynne, natomiast na 400Mhz wszystko skakalo.. DOmyslam sie, ze "przyspieszenie" dzialania mozna zyskac wpisujac gdzies taki np obrazek do pamieci. Narazie jednak nei wglebialem sie w ten problem..

05-02-2005 19:25
Pokaż profil Ravender  Wyślij email do Ravender   Odwiedź stronę Ravender       2854667
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

tylko że tu chodziło o zupełnie co innego


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

06-02-2005 00:03
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Wszystkich odpowiedzi: 19 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1