Animationsproblem
Übersicht

snipsBetreff: Animationsproblem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, ich bin neu hier und in BB. Ich habe 'versucht eine Animation zu ertsellen, hab ein .bmp bild mit 4 einzelnen Figuren gemalt (der Pfad stimmt auch) und folgendes in BB geschrieben
Code: [AUSKLAPPEN] Graphics 640, 480
Animation = LoadAnimImage("C:\Programme\Blitz3D\bilder\cowboyani.bmp", 103, 200, 0, 4) MaskImage Animation, 255, 0, 255 DrawImage Animation, 100, 75, 0 DrawImage Animation, 100, 75, 1 DrawImage Animation, 100, 75, 2 DrawImage Animation, 100, 75, 3 WaitKey Ich weiss das es falsch ist, aber ich hoffe das ihr mit helfen könnt. ( wenn ich es jetzt starte, wird das letzte bild aus der reihe geladen) Bild siehe hier: http://insel.heim.at/mainau/33...boyani.bmp |
||
User posted image |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, also mal davon abgesehen, dass du alle Bilder übereinanderzeichnest, ist mir eigentlich nichts falsches aufgefallen (über die absolute Pfadangabe vom Bild könnte man sich noch streiten)
Code: [AUSKLAPPEN] Graphics 640, 480 Animation = LoadAnimImage("C:\Dateien\cowboyani.bmp", 103, 200, 0, 4) MaskImage Animation, 255, 255, 255 DrawImage Animation, 0, 75, 0 DrawImage Animation, 103, 75, 1 DrawImage Animation, 206, 75, 2 DrawImage Animation, 309, 75, 3 WaitKey Ich hab dann mal die Mask- Color geändert und die X-Positionen (2er Parameter bei Drawimage) angepasst. Die vier Frames der Figur liegen nun nebeneinander... MfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja , es liegt daran , dass du eine falsche Farbe maskiert hast.
Die Farbe in dem Bild ist weiß ( 255,255,255 ) und nicht rosa/pink ( 255,0,255 ) , somit wird das Bild falsch maskiert und jede einzelne Animationsphase überlappt die vorherige.Mach es mal so: grahics 640,480,16,1 setbuffer backbuffer() While keyhit(1)=0 cls drawimage bild,100,75,animation animation=animation+1 if animation=3 then animation=0 flip delay 25 wend end Jetzt läuft er wie ein doofer die ganze Zeit auf der Stelle. Soweit müsste es dann klappen.Nur noch die Animation hinzufügen und als Bild reinladen. |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habt ihr schon mal was von Schleifen gehört? ![]() Code: [AUSKLAPPEN] Grahics 640, 480, 16, 1 SetBuffer BackBuffer() Repeat For Frame = 0 to 3 Cls DrawImage Bild, 100, 75, Frame Delay 25 Flip Next Until KeyHit(1) End Ich habe mal was ähnliches gemacht: Code: [AUSKLAPPEN] Graphics 140, 140, 16, 2 AppTitle "AnimImage" SetBuffer BackBuffer () Movie=LoadAnimImage("Explosion1.bmp", 100, 100, 0, 25) Repeat For i = 0 To 24 Cls DrawImage Movie, 20, 20, i Locate 0,0: Print "Frame: " + (i+1) Delay 40 Flip Next Until KeyHit(1) WaitKey End Beispiel: http://home.t-online.de/home/D...mImage.rar |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
snips |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Holzchopf: thx aber ich will ja das er ne enimation draus macht und er sich bewegt (auf der stelle)
@Kekskiller: Auch thx, aber wenn ich starten will sagt er function not found ( ich hab die grafik eingefügt und gesetzt) @travis: auch thx aber bei deiner erklärung sagter auch fungtion not found... Noch eine kleine frage: wie färbe ich den kompletten aktuellen Hintergrund ein (zB grün) |
||
User posted image |
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn du es bei dem doppelbuffern ( wie bei mir ) machen möchtest ,
dann nutze : ClsColor Rot,Gün,Blau Einfach rot , grün , balu die Farbwerte einsetzen und die nächsten Bildschirmlöschereien werden in dieser Farbe eingefärbt. Das mit der Function liegt wahrscheinlich daran , dass ich graphics nicht richtig geschrieben habe ( glaube ich jedenfalls ).Sonst wüsste ich nicht , was daran falsch ist. |
||
konstantin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Holzchopf hat Folgendes geschrieben: Hmm, also mal davon abgesehen, dass du alle Bilder übereinanderzeichnest, ist mir eigentlich nichts falsches aufgefallen (über die absolute Pfadangabe vom Bild könnte man sich noch streiten)
Code: [AUSKLAPPEN] Graphics 640, 480 Animation = LoadAnimImage("C:\Dateien\cowboyani.bmp", 103, 200, 0, 4) MaskImage Animation, 255, 255, 255 DrawImage Animation, 0, 75, 0 DrawImage Animation, 103, 75, 1 DrawImage Animation, 206, 75, 2 DrawImage Animation, 309, 75, 3 WaitKey Ich hab dann mal die Mask- Color geändert und die X-Positionen (2er Parameter bei Drawimage) angepasst. Die vier Frames der Figur liegen nun nebeneinander... MfG Willst du den jungen Mann für dumm verkaufen? Grafdikmodus setzen, bilder laden, bilder zeichnen, flippen. |
||
snips |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wirklich sehr net das ihr alle postet (und helfen wollt) aber könnte einer alles so hier reinschreiben wie es funktioniert ? (ausser grafikpfad) | ||
User posted image |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versuchs mal:
Hier noch mal der Code mit Kommentaren: Code: [AUSKLAPPEN] Grahics 640, 480, 16, 1 ; sollte wohl klar sein ;-) SetBuffer BackBuffer() ; Unsichtbaren BackBuffer aktivieren Bild = LoadAnimImage("C:\Bild.bmp", 32, 32, 0, 4); Animationsbild laden ; (Bild=LOADANIMIMAGE (Datei$, Breite, Höhe, Start, Frames) ; Breite und Höhe ist für jedes Einzelbild in der Bilddatei ; Start ist das erste Bild, das eingeladen wird (normalerweise = 0) ; Frames sind die Anzahl der vorhandenen Bilder Repeat ; Anfang der Hauptschleife For Frame = 0 to 3 ; Scheife, die jeden Frame nacheinander auswählt Cls ; BackBuffer / Bildschirminhalt löschen (unsichtbar) DrawImage Bild, 100, 75, Frame ; Aktuellen Frame zeichnen Delay 25 ; Verzögerung Flip ; Buffer tauschen (Bild wird jetzt sichtbar) Next ; Nächsten Frame auswählen Until KeyHit(1) ; Hauptschleife bis ESC wiederholen End ; Programmende Das muss aber so funktionieren, jedenfalls wenn man nur diesen Code hier nimmt. Guck dir mal das Beispiel an, das ist voll lauffähig, mit Bilddatei. Ist das gleiche Prinzip. http://home.t-online.de/home/D...mImage.rar |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
snips |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BIG THX Travis es funzt ![]() |
||
User posted image |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also die Geschwindigkeit könnte man z.B. so regeln:
Code: [AUSKLAPPEN] Graphics 140, 140, 16, 2 AppTitle "AnimImage" SetBuffer BackBuffer () Movie=LoadAnimImage("Explosion1.bmp", 100, 100, 0, 25) Bremse = CreateTimer(25) ; 25 Frames pro Sekunde , So viele Bilder werden pro Sekunde gezeichnet Repeat For i = 0 To 24 Cls DrawImage Movie, 20, 20, i Locate 0,0: Print "Frame: " + (i+1) WaitTimer(Bremse) ; Das hier ist die Verzögerung !!! Flip Next Until KeyHit(1) WaitKey End Das ist jetzt so eingestellt, das genau 25 Frames pro Sekunde gezeichnet werden. Bei 25 Bildern macht das genau eine Sekunde. Will man es jetzt schneller haben, stellt man es auf 50 Bilder pro Sekunde. Dann läuft es genau 0,5 Sekunden. => 12 Bilder ca. 2 Sekunden. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
snips |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
THX aber es geht ja auch in dem vorherigen code bei delay ^^. Und zu der Tatsatursteuerung (von objekten) kann mir jemadn was sagen oder ein tutorial vorschalgen (ausser das von robb). | ||
User posted image |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist jetzt halt kurz gefasst, ausserdem gehe ich davon aus, dass du es selber schaffen wirst das Oval mit deiner Animation zu ersetzen.
Damit du deine Figur (so sag ich dem Oval jetzt mal) bewegen können willst, musst du dessen Position speichern, hier in den Variabeln xpos und ypos. Die Zeilen unter Position ändern, zeigen, wie man mit einer einfachen Rechnung und den nötigen Tastenabfragen so eine Bewegung zu Stande bringt. Ich erklär noch kurz das Prinzip (zB: an der X Pos.): das wichtigste ist wohl das in den Klammern; wie du vielleicht weisst, liefert KeyDown 1 zurück, wenn die entsprechende Taste gedrückt wird. Jetzt wird ganz einfach die Taste für nach rechts und die für nach links abgefragt und subtrahiert. Wird also nur die Taste nach rechts gedrückt, resultiert eine 1, wenn nur die Taste nach links gedrückt wird, eine -1. Diesen wert addiert man nun zur alten Position und schon findet eine Bewegung statt. möchtest du eine schnellere bewegung, setzt du hinter die äussere Klammer einen Faktor. Hier der Code Code: [AUSKLAPPEN] Graphics 800,600,0,2 SetBuffer BackBuffer() xpos = 400 ypos = 300 While Not KeyDown(1) Cls ; Position ändern xpos = xpos + (KeyDown(205) - KeyDown(203)) ypos = ypos + (KeyDown(208) - KeyDown(200)) Oval xpos, ypos, 20, 20 Flip Wend End Unter http://www.blitzbase.de findest du eine Tabelle mit den Scancodes aller Tasten. Eben wie gesagt: Sehr kurz gefasst ![]() PS: Alu: Wennschon, dann richtig, gel? Man "flipt" selten ohne Doublebuffering initialisiert zu haben. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
konstantin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Holzchopf hat Folgendes geschrieben: PS: Alu: Wennschon, dann richtig, gel? Man "flipt" selten ohne Doublebuffering initialisiert zu haben.
Und man läd selten Grafiken ohne den Grafikmodus zu initiallisieren ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group