Animationsproblem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

snips

Betreff: Animationsproblem

BeitragFr, Jan 16, 2004 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Holzchopf

Meisterpacker

BeitragFr, Jan 16, 2004 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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 BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Kekskiller

BeitragFr, Jan 16, 2004 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 16, 2004 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Habt ihr schon mal was von Schleifen gehört? Wink

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

BeitragFr, Jan 16, 2004 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragFr, Jan 16, 2004 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 16, 2004 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 16, 2004 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 16, 2004 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 17, 2004 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
BIG THX Travis es funzt Very Happy hm wie kann ich die animation jetzt langsammer abspilen und noch ne frage, ich hab zwar das tuto von ropp gelesen aber es wird alles nich in Beispielen erklärt und zwar hab ich nen prob mit der tastensteuerung (zB Oval über bildschirm steuern) könnte jemand nen beispiel code hier reinsetzten ???
User posted image

Travis

BeitragSa, Jan 17, 2004 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 17, 2004 0:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Holzchopf

Meisterpacker

BeitragSa, Jan 17, 2004 1:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

PS: Alu: Wennschon, dann richtig, gel? Man "flipt" selten ohne Doublebuffering initialisiert zu haben.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

konstantin

BeitragSa, Jan 17, 2004 9:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group