Animation aus Sprites

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
Benutzeravatar
Reever
Beiträge: 29
Registriert: 13.08.2005 21:36
Wohnort: NRW

Beitrag von Reever »

In Ordnung nur habe ich keinen #PB_Any Befehl /:->
Ich glaube ohne die neue Version, ist das echt blöd irgendwas zu machen, dass macht ein wenig fertig, grade fürn newbie :|
Oder kann man das so mit Loadsprite durchnummerieren in der Linked List und ohne den #PB_Any Befehl, das Sprite darstellen? Probier ich mal :)
Naja hol mir mal ne neue Version, dann seh ich weiter :(
Das Wort eines Menschen wiegt nichts in den Augen eines Narrs
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Das ist natürlich auch möglich :). Also mit LinkedList und ListIndex als
Index angabe für Loadsprite.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Reever

ist das thema noch aktuell?

bin erst seit ein paar tagen wieder hier, sonst hätte ich eher was dazu geschrieben...

evtl. waren die kommentare der kollegen etwas zu hochgegriffen für nen neueinsteiger.
also...

1. LinkedList

wenn du dir WaponezII mal genau ansiehst, wirst du bemerken,
dass die liste verwendet wird, um mehrere objekte des gleichen
typs zu verwalten, nicht für eine einfache aufzählung.

dein denkfehler bei

Code: Alles auswählen

Maus()\LaufendeMaus=DisplaySprite(0,BackX,100)
könnte sein, dass du dachtest, in der liste werden befehle gespeichert.
daher wahscheinlich auch deine schreibweise:

Code: Alles auswählen

   While NextElement(Maus()) 
          Maus()\LaufendeMaus 
es stehen aber nur daten in der liste.

2. MouseX()

gibt die aktuelle position zurück.

Code: Alles auswählen

If MouseX()+1 
bewirkt nicht, dass auf eine mausbewegung reagiert wird.

3. Schleifen

das programm wird befehl für befehl abgearbeitet,
es wartet nicht mit der ausführung,
außer du befiehlst es ausdrücklich.

also brauchst du eine Hauptschleife, die immer wieder durchlaufen wird.

--------------------------------------

A) Beispiel für eine Hauptschleife:

Code: Alles auswählen

Repeat
    ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
diese schleife wird immer wieder durchlaufen,
immer wieder die tastatur gecheckt,
bis die Escape-taste gedrückt wird.

ansonsten tut sie noch gar nichts.


B) VOR der Hauptschleife

mußt du die sprites laden und den screen öffnen, zum beispiel so:

Code: Alles auswählen

OpenScreen(800,600,32,"TestScreen")
LoadSprite(0,"MeinBild1.bmp")
LoadSprite(1,"MeinBild2.bmp")
LoadSprite(2,"MeinBild3.bmp")

C) Zeitsteuerung

eine millisekunden verzögerung ist immer eine gute lösung.

Code: Alles auswählen

Repeat
    Delay(1)
Until GetTickCount() >= WeiterZeit
WeiterZeit = GetTickCount() + 20
diese schleife führt immer wieder ein Delay(1) durch,
bis 20 millisekunden vergangen sind.
Sie sollte für sich alleine innerhalb der hauptschleife stehen.

Anm:
die Verwendung von Delay ist durchaus zu empfehlen,
da das programm ansonsten die CPU vollständig beansprucht.


D) Verhältnisse der Abläufe

evtl willst du nicht, daß die animation ins nächste bild geht,
bei jedem pixel das der sprite bewegt wird.

hier mal ein kleines beispiel:

Code: Alles auswählen

If Keyboardpushed(#PB_Key_Right)
    X = X+1
    If X > 800
        X = 0
    EndIf
    count = count +1
    If count > 2
        count = 0
        Frame = Frame +1
        If Frame > 2
            Frame = 0
        EndIf
    EndIf
EndIf

DisplaySprite(Frame,X,Y)
hierbei wird das sprite bewegt, wenn die cursor-rechts-taste gedrückt wird.
alle 3 pixel bewegung wird der animationsframe erhöht,
der wird wieder auf 0 gesetzt, wenn das ende erreicht ist.


ich hoffe, das hat dir ein wenig geholfen, wenn du noch fragen hast, schick mir ne PN...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten