Rasende Animation
Übersicht

![]() |
ArchangelBetreff: Rasende Animation |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe ein kleines Problemchen mit meiner 2D Animation!
Wollte eigentlich eine flackernde Flamme animieren! Doch leider rast die Animation so schnell als ob man denk, der Computer will sich bei der Animation selbst überholen! Wie kann ich die Geschwindigkeit regulieren?? Habe Die Hilfe benutzt, aber genau das habe ich abgepinselt was da unter "LoadAnimImage" steht ... aber i-wie will mein PC das net verstehen oder ist der Code dazu anders zu verstehen?? Bitte um schnelle Lösung dieses Probelms (bin sicherlich nicht der einzigste ![]() mfg Archangel |
||
![]() |
beanage.johannes |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi.
du brauchst einen timer der die animation in einer normalen und auf jedem computer gleich-schnellen darstellt. EDIT (habe vergessen timerticks(timer) zu schreiben Code: [AUSKLAPPEN] bild = loadanimimge("",......) timer = createtimer( hertz z.B. 10 - das sind dann 10 bilder pro sekunde ) repeat cls drawimage bild,0,0,timerticks(timer) Mod bild.frames.length flip forever |
||
- Zuletzt bearbeitet von beanage.johannes am Di, Jun 02, 2009 22:38, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Grundsätzlich wahr, aber den Code finde ich ungewöhnlich ![]() Code: [AUSKLAPPEN] Graphics(800,600,32,2)
Local timer = CreateTimer(60) ;*** Maximal 60Hz = tft-Monitor Local MaxFrames, Frame Local Zeit, Dauer=1000, ms ;*** Timer der das Programm nicht anhält Local bild = LoadAnimImage("",hoch,breit,0,MaxFrames-1) Repeat Cls ms = MilliSecs() DrawImage(bild,0,0,Frame) If Zeit + Dauer < ms Then Zeit = ms Frame = (Frame + 1) Mod MaxFrames EndIf Flip(0) WaitTimer(timer) Until KeyHit(1) Edit: Extra Timer um die Frames jede Sekunde weiter zu schalten. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
beanage.johannes |
![]() Antworten mit Zitat ![]() |
---|---|---|
habe den code oben nochmal editiert...warum nicht so wie bei mir? ist einfacher und für den anfang völlig ausreichend^^ | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das "bild.frames.length" sieht mir sehr nach BlitzMax aus ![]() Für Timer + Flip(0) siehe Hurra, 100 % Auslastung |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
beanage.johannes |
![]() Antworten mit Zitat ![]() |
---|---|---|
ups mist.... ^^aus versehen BMax code gepostet^^ ![]() Zitat: Für Timer + Flip(0) siehe Hurra, 100 % Auslastung sry verstehe nicht ganz... timer und flip machen 100% auslastung? nee |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube er meinte Zitat: Timer + Flip(1) ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Archangel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke schonmal für die vielen postes ... *gleich in die tat umsetz*
nur ... der tag "Millisecs()" was macht der genau ... da steht i-was von wegen Zwit nach Windows Start ... kapier ich net ![]() Sorry, dass ich ein Beginner bin, der sich wie ein Beginner verhält! ![]() ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Millisecs![]() Code: [AUSKLAPPEN] If Zeit + Dauer < ms Then
Sei Zeit mal für unsere Zwecke 5000 Millisekunden - unwahrscheinlich aber das ist egal - und dauer 1000 ms. 5000+1000 = 6000. Wenn Millisecs() 6000 überschreitet, ist eine Sekunde vergangen. Die Zeit wird nachgestellt, und die Aktion(en) ausgeführt - Die Bedingung wird wieder wahr sobald "dauer" ms vergangen sind. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Archangel |
![]() Antworten mit Zitat ![]() |
---|---|---|
?? 6000 ms = 1 Sekunde ... das sind bei mir 6 Sekunden!
Nunja ich verstehe den code so, dass die Variable "Dauer" die Zeitbegrenzung ist für ein Bild (in diesem Fall 1000ms) Also würde nach 1000Ms = 1 Sekunde das nächste Frame erscheinen! Zeit nimmt den Wert von MilliSecs an und braucht dann wieder weitere 1000ms, damit das "If" erfüllt wird! Noch eine kleine Frage zur Geschwindigkeit meines Programms: 1.) Sollte ich den Wert "Zeit" zu Beginn meiner Schleife auf 0 setzten, damit mein PC nicht irgendwann mit riesigen Zahlen hantieren muss? 2.) Die Zeile timer=CreateTimer(60) sagt meinem Programm, dass es 60 mal pro sekunde durchlaufen werden soll und dadurch meine CPU-Auslastung schont! ... oder? |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
1.) Das ist dem Computer egal... ![]() 2.) Eigentlich sagt das die Zeile WaitTimer(timer), die von dir genannte Zeile gehört natürlich dazu. |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nicdel hat Folgendes geschrieben: 1.) Das ist dem Computer egal...
![]() Hab mal gehört das nach mehr als 10 (oder so) Tagen es zu Problemen kommen könnte.. da die Zahl zu gross für einen Long Integer (oder was auch immer BB nimmt) wird. Millisecs() auf 0 zu setzten wird wohl eher schwer ![]() Ruf die Funktion einmal auf und speichere den Wert, danach baust du dir eine eigene Funktion die die MS zählt ^^ mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
ozzi789 hat Folgendes geschrieben: Hab mal gehört das nach mehr als 10 (oder so) Tagen es zu Problemen kommen könnte..
Man kann mit BB also keine Spiele für Dauerzocker machen. Schade. ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: 6000 ms = 1 Sekunde ... das sind bei mir 6 Sekunden! Die aktuelle Zeit wird Fünf Sekunden nach Start des Computers gespeichert. Eine Sekunde vergeht. Sechs Sekunden nachdem der Computer gestartet ist, findet die Aktion statt...
Maximalwert der Integer ist 2147483647 2147483647 / (1000 * 60 * 60 * 24) = 24,8 Tage |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh zuerst wollt ich 23 schreiben (rly) dachte aber das wär doch n wenig lange
@Nidcel lol 24 tage zocken? Nach 24 Tagen macht ein XP eh nur blödsinn, aussert die Server Version türlich ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach 24 Tagen findet der Overflow statt, das stimmt wohl. Das bedeutet aber nicht das danach alles den Bach runter geht - mein XP lHome als auch Pro lief auf meinen Desktoprechnern teils über Monate hinweg rund um die Uhr ohne dass es zu Problemen gekommen wäre.
Kritisch ist im Prinzip nur der Moment des Overflows, da dann plötzlich mit negativen Zahlen gerechnet wird, was man aber ohne Probleme mit & maskieren kann. (Ach ja: wer von euch mit regelmässigkeit 'Ruhezustand' benutzt: auch da wird die Systemuhr nicht zurückgesetzt, und so kommt man auch gern mal auf negative Millisecs()-Werte. Vorausschauendes Programmmieren lohnt sich immer ![]() Ist im Prinzip die selbe Geschichte wie das nutzen von Timern. Früher hat das keiner gemacht, weshalb heute alte Spiele unspielbar schnell rennen. Dass das zum Problem werden könnte wurde also erst späte erkannt. BB ist nicht unfähig die Millisecs-Grenze zu umschiffen - man muss es nur machen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group