Rasende Animation

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Archangel

Betreff: Rasende Animation

BeitragDi, Jun 02, 2009 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy )

mfg Archangel

beanage.johannes

BeitragDi, Jun 02, 2009 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xeres

Moderator

BeitragDi, Jun 02, 2009 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Grundsätzlich wahr, aber den Code finde ich ungewöhnlich Shocked
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

beanage.johannes

BeitragDi, Jun 02, 2009 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
habe den code oben nochmal editiert...warum nicht so wie bei mir? ist einfacher und für den anfang völlig ausreichend^^

Xeres

Moderator

BeitragDi, Jun 02, 2009 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Das "bild.frames.length" sieht mir sehr nach BlitzMax aus Wink
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

beanage.johannes

BeitragDi, Jun 02, 2009 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ups mist.... ^^aus versehen BMax code gepostet^^ Confused


Zitat:

Für Timer + Flip(0) siehe Hurra, 100 % Auslastung


sry verstehe nicht ganz... timer und flip machen 100% auslastung? nee

Tankbuster

BeitragDi, Jun 02, 2009 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube er meinte Zitat:
Timer + Flip(1)
Wink
Twitter
Download Jewel Snake!
Windows|Android

Archangel

BeitragMi, Jun 03, 2009 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

Sorry, dass ich ein Beginner bin, der sich wie ein Beginner verhält! Shocked Sad

Xeres

Moderator

BeitragMi, Jun 03, 2009 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Millisecs() liefert die Zeit, die seit dem Start des Computers vergangen ist. Also kann man diesen Wert in einer Variable z.B. "Zeit" Speichern. Jetzt vergleicht man den gespeicherten Wert mit dem aktuellen Wert von Millisecs. Aus der Differenz lässt sich die inzwischen vergangene Zeit berechnen.

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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Archangel

BeitragMi, Jun 03, 2009 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
?? 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

BeitragMi, Jun 03, 2009 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
1.) Das ist dem Computer egal... Very Happy

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

BeitragMi, Jun 03, 2009 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicdel hat Folgendes geschrieben:
1.) Das ist dem Computer egal... Very Happy

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 Wink
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

BeitragMi, Jun 03, 2009 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Wink
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

Xeres

Moderator

BeitragMi, Jun 03, 2009 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ozzi789

BeitragMi, Jun 03, 2009 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

BladeRunner

Moderator

BeitragDo, Jun 04, 2009 8:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink)

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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group