Seite 4 von 4

Verfasst: 19.08.2005 20:46
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 :(

Verfasst: 19.08.2005 21:37
von MVXA
Das ist natürlich auch möglich :). Also mit LinkedList und ListIndex als
Index angabe für Loadsprite.

Verfasst: 27.09.2005 02:36
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...