Animation & Musik
Übersicht

SnowdragonBetreff: Animation & Musik |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey,
ich habe da mal 2 Fragen, die mir momentan Kopfzebrechen bereiten. 1: Was ist der einfachste Weg, eine animierte Gif-Datei darzustellen? Neben meinem Textfenster im Spiel soll sich nämlich eine Person befinden und das Bild dieser Person soll auf und ab wippen, was ich mit einer Gif-Datei umgesetzt habe. 2: Ich verwende für einzelne abschnitte verschiedene Musik und momentan bekomme ich es nicht auf die Reihe, das vorherige Lied abzuschalten. In der Hilfe steht unter PlayMusic: Der Parameter "modus" steht in Blitzbasic (B2D) und B3D nicht zur Verfügung. Hat da jemand eine Idee? |
||
![]() |
Spark Fountain |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu 1) Gif-Dateien scheinen mit BlitzBasic nicht zu funktionieren (hab ich gerade probiert). Du kannst aber stattdessen die Einzelbilder einer Animation als "Filmstreifen" abspeichern, also als ein Bild, das aus mehreren Teilbildern hintereinander besteht. Dann lädst du den Streifen mit LoadAnimImage![]() ![]() BlitzBasic: [AUSKLAPPEN] DrawImage(gifAnimation, x, y, (MilliSecs() Mod 250) / 250) wenn die Animation vier Einzelbilder hat. Sonst kannst du beide Parameter anpassen (probier einfach ein bisschen rum). zu 2) Anstelle von PlayMusic ![]() ![]() BlitzBasic: [AUSKLAPPEN] Global channel Viel Erfolg weiterhin! |
||
Gewinner der MiniBCC's #11, #13 und #28 |
Snowdragon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Besten Dank! ![]() |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
GIFs kann man in BB mit den Movie-Befehlen nutzen, siehe OpenMovie![]() Auch wenn die Sache mit den Teilbildern und LoadAnimImage gebräuchlicher ist. mfG, Christoph |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Movie-Befehle geben einem deutlich weniger Kontrolle, was das genaue Abspielverhalten angeht. Sie sind hald eigentlich nur für Filme gedacht.
So kannst du bei einem Movie nicht die Abspielgeschwindigkeit ändern, und auch vor- und zurückspulen geht nicht. Außerdem müssen solche Movies immer komplett am Bildschirm sein, dürfen also nicht teilweise aus dem Bild rausschauen. Auch ignorieren sie die Befehle ViewPort und Origin. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Snowdragon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Liegt es an der Rechenleistung oder den Einstellungen, oder warum "ruckelt" es selbst bei kleinen Animationen mit 4 Frames. | ||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dafür müsste man deinen Code sehen. Meine Kristallkugel hat grad keinen Empfang ![]() Verwendest du GIF-Movies oder AnimImages? Bei Ersterem hast du immer eine fix eingestellte Animationsgeschwindigkeit, die im GIF vorgegeben ist. Die ist unabhängig davon, wie schnell dein Programm rennt. Verwendest du AnimImages, dann machst du was grob falsch, wenn du keine 4 FPS zusammen kriegst. Wenn du nur 4 Animations-Frames hast, dann kann deine Animation nicht sehr glatt sein. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Snowdragon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habs mal mit 16 Frames ausprobiert.
Aber das ist nicht so wichtig, ich setze mich später damit genauer auseinander. Code: [AUSKLAPPEN] Graphics 1600,1000, 0, 2 ;Graphikmodus setzen
SetBuffer BackBuffer() ;Doublebuffering vorbereiten While Not KeyHit( escape_key ) gifAnimation = LoadAnimImage("Ball.jpg", 100, 200, 0, 16) DrawImage(gifAnimation, x, y, (MilliSecs() Mod 100) / 10) ; Hier habe ich mit den 100 und 10 herumgespielt Flip Wend End |
||
- Zuletzt bearbeitet von Snowdragon am Sa, Jun 07, 2014 16:42, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dir fehlt ein bisschen Verständnis für Modulo: "var Mod 100" gibt dir den Rest der Division "var/100" - also bekommst du einen Wertebereich von 0 bis 99. Das macht aber als Angabe für den Frame keinen Sinn, da der bei dir bei 0 bis 15 liegt.
Was ich eher machen würde, ist den Frame per hand hoch zu zählen: BlitzBasic: [AUSKLAPPEN] frame = (frame + 1) Mod 16 Sobald der Frame das maximum überschreitet, fängt er wieder bei null an. Um das ganze Zeitlich zu steuern, baut man sich einen Timer um den Ausdruck herum: BlitzBasic: [AUSKLAPPEN] If timer < MilliSecs() Then ; Ist die aktuelle Zeit weiter vorangeschritten, als die Variable? Dann vergiss noch Print (schreibt nur in den Frontbuffer) und arbeite nur mit Text ![]() |
||
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) |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Print: In BlitzPlus kann man Print schon verwenden, da es dort auf die Konsole schreibt, und gar nicht ins Grafikfenster. | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn wir uns nochmal kurz auf diesen Code beziehen:
Code: [AUSKLAPPEN] While Not KeyHit( escape_key )
gifAnimation = LoadAnimImage("Ball.jpg", 100, 200, 0, 16) DrawImage(gifAnimation, x, y, (MilliSecs() Mod 100) / 10) ; Hier habe ich mit den 100 und 10 herumgespielt Flip Wend Dann sticht einmal ins auge, dass LoadAnimImage innerhalb der Schleife ausgeführt wird. Das belastet den PC sehr stark, wenn er 60mal in der Sekunde ein Bild in den Speicher holen soll. Unbedingt vor der Hauptschleife laden. Dieser Punkt und die Berechnung mit Mod wie von Xeres erklärt sollten fürs Erste alles sein was du brauchst um die Animation flüssig zu bekommen. mfG, Christoph |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group