Seite 1 von 4

Animation aus Sprites

Verfasst: 15.08.2005 17:56
von Reever
Ich habe ein Problem, was ich einfach nicht lösen kann
Wie kann man mithilfe von einfachen Bitmap Dateien ne Animation machen? Es gab da diese Beispieldatei Waponez II, da wurde das mit NextElement und Structuren gemacht.
Kann man das so machen?
Ich habe mich da versucht einzuarbeiten, aber hat nicht so gefunzt :lol:
Bin nicht allzu gut in abstaktem denken also am besten wär n Beispielcode :allright:

Achja habe Version 3.30
Muss mir mal endlich n Update besorgen :)

Danke schonmal im voraus <)

Verfasst: 15.08.2005 18:07
von Green Snake
hi

tipp: update sofort besorgen <)

zur frage.
du kannst das so lösen, in dem du einfach immer das nächste sprite anzeigst:

Code: Alles auswählen

repeat
displaysprite(i,0,0)

if i > (deine animationsbilderanzahl)
i = 0
endif

until Aussage

etwa so.
bei proggs, wo du mehrere animationen auf einmal anzeigst, wäre das mit linked lists oder arrays besser zu lösen :wink:

Verfasst: 15.08.2005 20:41
von Reever
Danke für die schnelle Antwort :allright:

Verfasst: 15.08.2005 21:01
von Reever
Bin mir nicht sicher, ich habs ausprobiert. Kann sein, dass ich da was falsch mache. Irre ich mich oder zeigt man dabei nur ein Sprite an?
Ist ja nur ein DisplaySprite() angegeben und wenn es bei meiner Bilderzahl (3 insgesamt) ankommt, wird es wieder auf 0 gesetzt, aber es wird ja nur eins gezeigt, muss man den Befehl mehrere Male verwenden? :| Ich will einfach eine Figur haben, die, wenn ich die Pfeiltasten nach unten drücke, nach unten läuft mit 3 Bildern und sich das dann wiederholt, also zum Ausgangssprite zurückkehrt. Müsste ja damit gehen, aber mit einem Sprite? oder muss ich ne Linked List oder sowas machen und alle Sprites da reinpacken? :)

:o :lol: :lol: Danke schonmal

Verfasst: 15.08.2005 21:34
von Green Snake
nene.....

wie du siehst ist bei displaysprite KEINE zahl, sondern die variable i angegeben.
du hast richtig erkannt, dass i in JEDEM schleifen durchlauf um EINS erhöt wird.
das zeigt also immer dassprit mit einer grösseren indiffer zahl an.

du schreibst zb, um die bilder zu laden folgendes:

Code: Alles auswählen

LoadSprite(0,"Pfad zu bild 1")
LoadSprite(1,"Pfad zu bild 2")
LoadSprite(2,"Pfad zu bild 3")
man merke: die meisten sachen beginnen von bzw mit NULL :wink:

da i imme rim EINS grösser wird, wird auch immer ein anderes bild angezeigt. :wink:

ich hoffe das ist jetzt einigermassen klar, ansonnsten einfach fragen <)

edit:

hier noch ein code, ich hoffe er funtzt :wink:

Code: Alles auswählen



InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"")

;LoadSprite(0,"Pfad zu bild 1")
;LoadSprite(1,"Pfad zu bild 2")
;LoadSprite(2,"Pfad zu bild 3")

LoadSprite(0,"1.bmp")
LoadSprite(1,"2.bmp")
LoadSprite(2,"3.bmp")

Repeat 
  ExamineKeyboard()
  
  DisplaySprite(i,0,0) 
  
  If i = 2 ; immer eins weniger, als die bildanzahl, da die bilder von 0 nummeriert sind :wink:  
    i = 0 
  EndIf 
  
  FlipBuffers()
  ClearScreen(0,0,0)

  Delay(1000)
  
Until KeyboardPushed(#PB_Key_Escape)
End



Verfasst: 15.08.2005 22:05
von Reever
Danke erstma für die schnelle und freundliche Hilfe :mrgreen:
Nee hat nicht so ganz geklappt mit dem Code, am besten ich geb dir einfach deinen Code wieder von mir ein wenig modifiziert :lol:
Vielleicht kannste mir dann sagen, was ich falsch mache :wink:
Also hier der Code:


InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"KK")

LoadJPEGSprite(0,"Datei1.jpg",0)
LoadJPEGSprite(1,"Datei2.jpg",0)
LoadJPEGSprite(2,"Datei3.jpg",0)

Repeat
ExamineKeyboard()

DisplaySprite(i,BackX,BackY)

If KeyboardPushed(#PB_Key_Down)


If i = 2
i = 0

EndIf

BackX+0
BackY+1



EndIf
FlipBuffers()
ClearScreen(0,0,0)

End


:::
So habe ich mir das gedacht mit BackX, BackY
Die Figur geht nach unten, aber die Bilderschleife wird nicht durchlaufen :roll:
Da muss der Repeat Befehl rein oder aber wo dann?
Also wenn die Pfeiltaste runtergedrückt wird Repeat? until i=2 oder sowas? Ich dachte immer bei einem If Befehl kann man nur eine Möglichkeit abfragen. Da wird doch nichts durchgezählt oder? :)
Oder kann man das nicht mit BackX bzw. BackY machen?
Danke nochmals und nochmals :mrgreen: :allright:

Verfasst: 15.08.2005 22:13
von PMV
Nach dem

Code: Alles auswählen

ClearScreen(0,0,0)
fehlt

Code: Alles auswählen

 Until KeyboardPushed(#PB_Key_Escape)
^^das ist mir auf die schnelle aufgefallen :D und

Code: Alles auswählen

BackX+0
kannst auch getrost löschen, da hier nichts passiert.

Edit: Hab nun den Code so weit verbessert. Hoffe das beantwortet deine Fragen :D

Code: Alles auswählen

InitSprite() 
InitKeyboard() 
OpenScreen(800,600,32,"KK") 

LoadJPEGSprite(0,"Datei1.jpg",0) 
LoadJPEGSprite(1,"Datei2.jpg",0) 
LoadJPEGSprite(2,"Datei3.jpg",0) 

Repeat 
  ExamineKeyboard() 
  
  ClearScreen(0,0,0) 
  DisplaySprite(i,BackX,BackY) 
  
  If KeyboardPushed(#PB_Key_Down) 
    If i = 2 
      i = 0 
    Else 
      i + 1 ;für die Animation muss der i auch pro durchlauf 1 höher gesetzt werden 
    EndIf 
    BackY+1 
    If BackY > 600  ;Wenn das Sprite außem Bildschirm verschwindet 
      BackY = - SpriteHeight(0) ;wird es wieder hinter den oberen Rand gesetzt 
    EndIf
  EndIf
  FlipBuffers() 
Until KeyboardPushed(#PB_Key_Escape)
Edit: code berichtigt, da ich grad auf die schnelle keine Grafiken habe musst ich das ausem kopf machen ohne testen, da musste mir natürlich nen denkfehler passieren -.-, jetzt sollte es so klappen wies soll^^

MFG PMV

Verfasst: 15.08.2005 22:52
von Reever
Jo stimmt, dass mit dem KeyboardPushed :lol:
Hab mich ein wenig beeilt um ehrlich zu sein, hab nichtmehr drauf geachtet <) Aber die Leute hier kriegen das eh in Sekundenschnelle wieder hin deswegen habe ich nicht so auf das Routinemäßige geachtet :lol: :allright:
Das mit dem BackX ist mir jetzt auch aufgefallen, aber falsch isses auch nicht :mrgreen: Hast aber recht, nur wer lässt sich gerne berichtigen? :roll: Deshalb mein blödes Geschwätz <)
Danke man, die Animation läuft, zwar etwas schnell, weil die Frames zu hoch sind aber vielen dank :wink:

Verfasst: 15.08.2005 22:57
von PMV
ein

Code: Alles auswählen

 Delay(10)
oder ein etwas höherer Wert als 10 in der Repeat : Until-schleife macht es was langsamer.

Aber für richtige Spiele die auf allen Systemen gleich laufen sollen ist das eine denkbar schlechte lösung. Hierfür ist die Zeitsteuerung dein Freund ... such mal im Forum dannach. Vielleicht auch auf Purearea.net ... ist zwar nicht ganz so einfacher aber wer Spiele Programmieren möchte kommt früher oder später nicht mehr drum herrum :wink:

MFG PMV

Verfasst: 15.08.2005 22:59
von Reever
Da fällt mir ein wie kriege ich denn die Geschwindigkeit der aufeinander folgenden Sprites hin? War beim schreiben des großen Dankeschöns in Gedanken noch bei den avi files, aber bei Bmps gibts ja keine Frames :lol: also hat wer ne Lösung? /:-> Wahrhscheinlich am besten wenn man son Befehl wie Delay oder so verwendet oder? :)

Danke :allright: