Frage zu beispiel aus einem Tutorial
Übersicht

BassmasterBetreff: Frage zu beispiel aus einem Tutorial |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab mir von der Seite www.robsite.de folgendes Tutorial runtergeladen.
Rob´s BB-Kurs 2 an dieser Stelle komm ich nicht weiter: Jetzt könne wir bilder anzeigen. Jubel. Was aber wenn wir seit 5 Jahren an C&C 6 basteln und erstaunt feststellen dass unsere Figuren keine Animationen haben? Dann nehmen wir uns einen Keks und schauen uns LoadAnimImage an. Blitz Basic bietet nämlich auch die Möglichkeit ganz einfach aus mehreren Einzelbildern intern "ein" animiertes zu machen. Oder besser gesagt aus einem Filmstreifen die einzelnen Bilder zu extrahieren und gemeinsam in eine Bildvariable zu laden. Also, erstmal der Befehl: bildvariable = LoadAnimImage("bild.bmp", hoehe, breite, erstes_bild, bilder_anzahl) hoehe und breite geben die Höhe und breite eines Einzelbildes im großen Gesamtbild an (alle Einzelbilder müssen gleich groß sein, klar). erstes_bild ist das erste Bild in der Reihe. Gewöhnlich ist es 0. bilder_anzahl ist die Gesamtanzahl der Bilder die in dem "Filmstreifen" drin sind. Wenn man sehr viele Einzelbilder hat muss man auch nicht unbedingt alle in einer Reihe haben, man kann das ganze auch wie in einem Comic anordnen, also von links nach rechts und von oben nach unten. Da nun mehrere Bilder in einer Bildvariable sind muss man die ganzen Bilder-Mal-Befehle um einen Parameter erweitern, nämlich um die Nummer des Einzelbildes (des Frames). Einfach hinten dranhängen: DrawImage bildvariable, x, y, frame DrawBlock bildvariable, x, y, frame TileImage bildvariable, x, y, frame TileBlock bildvariable, x, y, frame Zählt man jetzt in einer Schleife die Framezahl immer eins weiter (mit kleinen Pausen dazwischen) und fängt nach dem letzten wieder von vorne an, hat man schonmal eine einfache Animation. Kann man natürlich noch beliebig ausweiten... Beispiel: [img] http://img-up.net/?up=trooprunnetDjAtRg.gif [/img] [img] http://img-up.net/?up=trooprunnePu80w.GIF [/img] Wie muss ich den jetzt genau den Source Code aufbauen kann mir da wer ein beispiel geben ? und muss ich das erste bild komplett in den speicher laden oder nur einzelene davon O_o ?? |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann es versuchen so zu erklären:
Loadanimimage liefert nicht nur ein Bild zurück, sondern ein "Bündel" aus mehreren Bildern. bildvariable = LoadAnimImage("bild.gif", 56, 48, 0, 12) wäre jetzt das Konkrete beispiel für das beispielbild. Damit hast du jetzt gleichzeitig 12 bilder, mit denen du arbeiten kannst: Drawimage img, x, y, 0 Drawimage img, x, y, 1 Drawimage img, x, y, 2 .... Drawimage img, x, y, 11 der Rest ist genauso handzuhaben wie bekannt. Eine idee der umsetzung wäre z.B., dass du eine Variable Frame hast, die in der Schleife immer um 1 erhöht wird. und dann schreibst Code: [AUSKLAPPEN] Drawimage img, x, y, frame mod 12
"mod" ist btw die restrechnung |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab das jetzt so versucht.
Graphics 800,600 Global frame For frame = 1 To 11 Step 1 bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) DrawImage bild, x, y, frame DrawBlock bild, x, y, frame TileImage bild, x, y, frame TileBlock bild, x, y, frame Next Da bewegt sich zwar was aber dann is das ganze Fenster voll mit den Bildern und das ist nach ein paar Sekunden wieder zu ende. Oder geht das nur mit gif bilder den ich bin gerade aufer arbeit und hier hab ich nur die Demo ich hab vergessen die Vollversion mit zu nehmen ![]() ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach Graphics sollte man den Puffer angeben (meistens SetBuffer BackBuffer()). Ladebefehle gehören nicht in eine Schleife. Nach dem zeichnen sollte man mit Flip die Puffer tauschen und den hinteren (nur bei 2D) mit Cls löschen. Dann kann das ganze wieder von vorne beginnen. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bassmaster hat Folgendes geschrieben: Da bewegt sich zwar was aber dann is das ganze Fenster voll mit den Bildern
Lass das TileImage weg. Das bewirkt das das Bild möglichst viel "gezeichnet" wird. |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bewegen tut er sich ja aber nach ca. 3 Sec bekomm ich die meldung.
Runtime Error Image Frame out of range und das ganze fenster ist auch noch immer voll mit dem bild ![]() Ach ja und noch eine Frage^^ Gibt es auch noch andere Compiler als den Blitz 3D ? Weil der zeigt ja leider nicht an in welcher Zeile z.b. der Fehler ist. Neben Blitz Basic mache ich ja auch noch C++ und die C++ Compiler zeigen halt an wo man einen Fehler gemacht hat deswegen dachte ich das es sowas auch vielleicht für Blitz Basic gibt. |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Denk mal nach!
Code: [AUSKLAPPEN] TileImage
;und TileBlock Du must beides entfernen. EDIT: Zu deiner Fehlermeldung, übersetzt mal, dann weißt du was falsch ist. ![]() |
||
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja der Frame ist nicht in Range also nicht im Bereich aber das sagt mir nix ![]() Ich mach Blitz Basic erst seit 2 Tagen und will das Tutorial durcharbeiten. Aber wenigstens ist jetzt nicht mehr das ganze fenster voller bilder^^ Graphics 800,600 SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 11 bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) DrawImage bild, x, y, frame Cls DrawBlock bild, x, y, frame Flip Next |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
- Du lädst immer noch innerhalb einer Schleife deine Bild immer wieder neu.
- Nach einem Flip sollte der Bildschirm gelöscht werden, nicht weitere Bilder gezeichnet werden. - Die Variablen x und y sind nicht deffiniert und müssten beide den Wert 0 haben (nur als Info). Da du grad mit programmieren anfängst, gewöhne dir gleich folgendes an: - Rücke den Code immer mit Tabulator ein, oder bei der Blitz3D-Vollversion eine andere IDE ausprobieren. - Deklariere jede deiner Variable zuvor mit ql:Local oder ql:Global - Installiere dir die deutsche Onlinehilfe von TheShadow Hier mal meine Ergenzung zum Code: Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() Local Frame,X,Y Local Bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) For Frame = 1 To 11 X=X+20 Y=100 DrawImage Bild, X, Y, Frame DrawBlock Bild, X, Y, Frame Flip Cls Next Print "Taste drücken um zu beenden." WaitKey End ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast geschrieben
Zitat: Code: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 11 bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) DrawImage bild, x, y, frame Cls DrawBlock bild, x, y, frame Flip Next es muss aber heisen: Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer() Global frame bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) For frame = 0 To 1 ;-->Step 11 das kannst du weglassen Cls DrawBlock bild, x, y, frame Flip Next wenn du mit "LoadAnimImage" arbeitest musst, wenn das erste Frame haben wilst schreiben: Code: [AUSKLAPPEN] DrawImage bild,x,y,0
und nicht: Code: [AUSKLAPPEN] DrawImage bild,x,y,1
denn dann würde das 2. Frame angezeigt werden. ![]() EDIT: Hectic war schneller. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo mein lieber Neuling.
Willkommen in der Welt der Programmierung. Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 11 ; gehe von 1 bis 12 in 11er schritten !!! bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) DrawImage bild, x, y, frame Cls DrawBlock bild, x, y, frame Flip Next wir wollen dioch nciht jedes 11. Bild sehen, sondern jedes. Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 1 ;<-- in 1ser schritten bitte bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) DrawImage bild, x, y, frame ;<-- Anzeigen des Bildes Cls ; <-- den Bildschirm schwarz machen DrawBlock bild, x, y, frame ; <-- Bild anzeigen Flip ;<-- Bildschirm anzeigen Next das macht wenig sinn, denn das drawimage, wird von uns nicht gesehen, weil wir danach ein CLS machen. das cls muss immer VOR allen draw - befehlen stehen Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 1 bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) cls DrawImage bild, x, y, frame ;<-- Bild anzeigen DrawBlock bild, x, y, frame ; <-- Bild anzeigen Flip ;<-- Bildschirm anzeigen Next jetzt sehen wir noch, wir zeigen 2 mal des selbe bild an, also, nehmen wir 1mal raus Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 1 bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) cls DrawImage bild, x, y, frame Flip Next nun geht das unheimlich schnell (60 Bilder prosekunde --> 12 bilder in 0.2 Sekunden), darum machen wir eine Pause rein,. Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 1 bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) cls DrawImage bild, x, y, frame Flip delay 1000; <-- eine sekunde warten bitte Next so, nun beschwerde, der fehler kommt immernoch? lass uns doch herrausfidnen, bei welchem bild: Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 1 bild = LoadAnimImage ("runner.bmp", 20, 20, 0, 12) cls DrawImage bild, x, y, frame text 0,0,frame ; <-- einen kleine infotext zur hilfe Flip delay 1000 Next so alles einiger massen klar? |
||
between angels and insects |
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jetzt funktioniert ![]() Aber ein paar Fragen hätte ich noch zum Code X=X+20 <--- bestimmt das wie weit das bild laufen soll ? Local Frame,X,Y <---- ist das dass selbe wie Local Frame = X,Y |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
X=X+20 -->Das bedeuted, wenn du ein Bild an der Position gemalt hast, das es um 20 Pixel verschoben wird
Local Frame=x,y ist (meinesachrens) nicht das Gleiche, bei Local Frame,x,y gibt es warscheinlich sogar eine Fehlermeldung. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok danke an alle für die hilfe =) | ||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Local Frame,X,Y <---- ist das dass selbe wie Local Frame = X,Y
Diesen Fehlglauben sollten wir aber ganz schnell aus der Welt schaffen. Wenn du es selber probieren willst, schau dir die deutsche Beschreibung zu ql:Local an. Hier mal schnell in meinen Worten: An Local kannst du beliebig viele Variablen übergeben, mit Beistrich getrennt. DieseVarialben sind ab dann lokal, also nur innerhalb des Hauptprogramms oder innerhalb einer Funktion gültig sind. "=" ist hingegen eine Zuweisung. Diese ist bei Local auch möglich, hat aber eine vollkommen andere Bedeutung. Damit wird eben einer der aufgelisteten Variablen ein Wert zugewiesen. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So ich bin jetzt zuhause jetzt wollte ich das nochmal mit der Vollversion ausprobieren und einem gif bild aber ich bekomme immer die fehlermeldung "image does not exist" aber das Bild hab ich den denn Ordner kopiert da wo auch der Source Code ist.
Oder ist hier was falsch dran O_o Graphics 800,600 SetBuffer BackBuffer() Global frame For frame = 1 To 12 Step 1 bild = LoadAnimImage ("runner.gif", 20, 20, 0, 12) Cls DrawImage bild, x, y, frame Text 0,0,frame ; <-- einen kleine infotext zur hilfe Flip Delay 1000 Next |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es reicht, wenn du das Bild einmal lädst. Außerdem ist der vierte Parameter bei LoadAnimImage 0, das heisst, die Frames gehen von 0 bis 11. Du hast aber in der Schleife 1 bis 12.
So ungefähr: Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer( ) Global bild = LoadAnimImage( "runner.gif", 20, 20, 0, 12 ) For frame = 0 To 11 Cls DrawImage bild, 0, 0, frame Text 0, 0, frame ; <-- einen kleine infotext zur hilfe Flip Delay 1000 Next |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieder die selbe Fehlermeldun ![]() ach ja noch eine Frage wie kann man bei Blitz Basic die Programme als exe abspeichern ? Graphics 800,600 SetBuffer BackBuffer( ) Global bild = LoadAnimImage( "runner.gif", 20, 20, 0, 12 ) For frame = 0 To 11 Cls DrawImage bild, 0, 0, frame Text 0, 0, frame ; <-- einen kleine infotext zur hilfe Flip Delay 1000 Next |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nimm bitte Codetags.
Code: [AUSKLAPPEN] [code][/code]
In deinen Forenpost einfügen. Dazu brauchst du für gifs und um in eine Exe zu kompilieren, die Vollversion. (Program->Create Executable) Und nicht jedes Gif geht, nimm lieber PNG's mit Frames.[/code] |
||
DennY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi !
Bassmaster hat Folgendes geschrieben: ach ja noch eine Frage wie kann man bei Blitz Basic die Programme als exe abspeichern ? geh einfach oben im Menü auf "Programm" und dann auf "Create Executable..." Bassmaster hat Folgendes geschrieben: Graphics 800,600 SetBuffer BackBuffer( ) Global bild = LoadAnimImage( "runner.gif", 20, 20, 0, 12 ) For frame = 0 To 11 Cls DrawImage bild, 0, 0, frame Text 0, 0, frame ; <-- einen kleine infotext zur hilfe Flip Delay 1000 Next Du hast wieder den selben Fehler gemacht! er lädt mehr Frames als es gibt! Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer( ) Global bild = LoadAnimImage( "runner.gif", 20, 20, 0, 11 ) ;<------ von 0 bis 11! For frame = 0 To 11 Cls DrawImage bild, 0, 0, frame Text 0, 0, "frame" ; <-- einen kleine infotext zur hilfe Flip Delay 1000 next |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group