GLBasic forum

Other languages => GLBasic - de => Topic started by: Lloyd on 2007-Nov-11

Title: Problem bei Jump and Run
Post by: Lloyd on 2007-Nov-11
Hallo,

Ich bin noch ganz frisch bei GLBasic und mache deshalb grade einige Tutorials. Mein erstes erklärtes Ziel ist es ne Simple "Rechts-Links" Steuerung mit 6 Bildern pro Animation und 2 für Stillstand zu machen (6 Bilder für die Animation "Nach Rechts gehen", 6 Bilder für die Animation "Nach Links gehen" und jeweils ein Bild für Stillstand für Links und Rechts).

Code (glbasic) Select
// --------------------------------- //
// Project: Test
// Start: Friday, November 09, 2007
// IDE Version: 5.071
// --------------------------------- //


// --------------------------------- //
// --->Grafiken laden
// --------------------------------- //


// --->Charakter: Deidara

//Stillstand

LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/stanceR.png", 0
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/stanceL.png", 1

//Gehen - Rechts

LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk1R.png", 2
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk2R.png", 3
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk3R.png", 4
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk4R.png", 5
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk5R.png", 6
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk6R.png", 7

//Gehen - Links

LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk1L.png", 8
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk2L.png", 9
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk3L.png", 10
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk4L.png", 11
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk5L.png", 12
LOADSPRITE "Ressourcen/Grafiken/Charakters/Deidara/walk6L.png", 13


// --------------------------------- //
// --->Animationsdeklaration
// --------------------------------- //


// --->Charakter: Deidara

DIM WalkRechts[7]      //7 Bilder pro Animation
DIM WalkLinks[7]       //7 Bilder pro Animation

//Die Bilder werden ins Array (Datenfeld) geladen

WalkRechts[0] = 0
WalkRechts[1] = 2
WalkRechts[2] = 3
WalkRechts[3] = 4
WalkRechts[4] = 5
WalkRechts[5] = 6
WalkRechts[6] = 7

WalkLinks[0] = 1
WalkLinks[1] = 8
WalkLinks[2] = 9
WalkLinks[3] = 10
WalkLinks[4] = 11
WalkLinks[5] = 12
WalkLinks[6] = 13


// --------------------------------- //
// --->Globale Variablen
// --------------------------------- //


GLOBAL Richtung = 0            //Richtung merken (0=Rechts, 1=Links)
GLOBAL Geschwindigkeit = 2     //Geschwindigkeit der Bewegung in Pixel/s
GLOBAL AniVerzoegerung = 100   //Animationsverzögerung
GLOBAL Spieler_X = 100         //Position des Spielers auf der X-Achse
GLOBAL Spieler_Y = 100         //Position des Spielers auf der Y-Achse


// --------------------------------- //
// --->Hauptprogramm
// --------------------------------- //


WHILE TRUE  //EndlosSchleife für das Hauptprogramm
   LOCAL Bewegung = 0 //Lokale Variable "Bewegung" wird Null gesetzt -> keine Bewegung!

// --->Nach Rechts gehen


   IF KEY (205) AND KEY (203) = 0    //Wenn Taste "Rechts" gedrückt ist und Taste "Links" nicht
      Richtung = 0                   //0 = Rechts
      Bewegung = 1                   //Bewegung findet statt
      INC Spieler_X,Geschwindigkeit  //Spieler wird um einen Pixel nach Rechts versetzt
     
      DRAWSPRITE WalkRechts[WR], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen
     
      IF Timer < GETTIMERALL()
        INC WR, 1                               //Auf nächstes Sprite schalten
        Timer = GETTIMERALL()+AniVerzoegerung  //Timer erhöhen (Verzögerung)
      ENDIF
     
      IF WR > BOUNDS (WalkRechts[], 0) THEN WR = 0  //Wenn WR größer als die Anzahl der Felder im Array WalkRechts[] ist dann 0
     
   ELSE
      WR = 0 //WR wird Null gesetzt, da "Rechts" nicht gedrückt ist und somit keine Bewegung stattfindet

   ENDIF
   
   
// --->Nach Links gehen

   
   IF KEY (203) AND KEY (205) = 0    //Wenn Taste "Links" gedrückt ist und Taste "Rechts" nicht
      Richtung = 1                   //1 = Links
      Bewegung = 1                   //Bewegung findet statt
      DEC Spieler_X,Geschwindigkeit  //Spieler wird um einen Pixel nach Links versetzt
     
      DRAWSPRITE WalkLinks[WL], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen
     
      IF Timer < GETTIMERALL()
        INC WL, 1                               //Auf nächstes Sprite schalten
        Timer = GETTIMERALL()+AniVerzoegerung  //Timer erhöhen (Verzögerung)
      ENDIF
     
      IF WL > BOUNDS (WalkRechts[], 0) THEN WL = 0  //Wenn WL größer als die Anzahl der Felder im Array WalkLinks[] ist dann 0
     
   ELSE
      WL = 0 //WL wird Null gesetzt, da "Links" nicht gedrückt ist und somit keine Bewegung stattfindet

   ENDIF
   
WEND
END
Hab das nach einem Tutorial hier im Forum gemacht (bisschen verändert und angepasst), bringe das aber nicht zum Laufen. Er spuckt keine Fehlermeldungen aus, sondern bleib einfach bei der Ausführung der EXE hängen, Auf dem Bildschirm steht dann einfach "Loading......", bis ich das Programm schließen will und dann Windows meldet, das das Prog nicht reagiert^^

Woran liegt das? Muss da ja wohl irgendwas falsch gemacht haben:/

Danke schonmal im voraus;)
Title: Problem bei Jump and Run
Post by: D2O on 2007-Nov-11
Na dann mal Hallo hier :)

OK, folgendes,
1. Du hast "Showscreen " vergessen :)
2. Dann, wenn Du es am schleifen ende setzt, wird dir nur was angezeigt wenn Du eine Steuerungstaste drückst.

Mach für das Sprite objekt nur ein Drawsprite im Mainprogram und verändere nur die Animations variable in den If abfragen.
Gemeint in etwa so ;) nur Pseudo code ;)


QuoteWhile...
if
blablabla... dann animation = alkRechts[WR]
end
if
blablabla... dann animation = alkRechts[WR]
end

DRAWSPRITE animation, Spieler_X, Spieler_Y
showscreen
wend
Ich hoffe Du verstehst was ich meine.
Ich möchte Dir hier nicht denn ganzen Code vorkauen, ein kleines bisschen selber Denken :)

Wenns dann immer noch nicht klabt, einfach nochmals fragen und wir werden etwas genauer darin eintauchen.

Edit://
Jepp, Dein Code ist sehr schön Kommentiert :good:
Title: Problem bei Jump and Run
Post by: Schranz0r on 2007-Nov-11
Liest sich sehr gut dein Code!
Aber Showscreen sollte man nicht vergessen ;)

Und D²0 hat recht!

Wenn kein DRAWSPRITE ausserhalb der IF-Schleife steht gibts kein bild!

Also muss du noch machen das wenn keine Taste gedrückt ist das Standbild der jeweiligen seite noch angezeigt wird:

Pseudo:
Code (glbasic) Select
If key(rechts)
    standbild = standbildrechts
    ....
endif

if key(links)
    standbild = standbildlinks
    ....
endif

//some code

If key(rechts) = 0 and key(links)= 0
    Drawsprite standbild,pos_x,pos_y
endif
Naja ausserdem war das tutorial von mir, und nicht so der hit ^^
Weiss ich selber....
Würd es jetzt mit Types machen denke ich ;)
Title: Problem bei Jump and Run
Post by: Lloyd on 2007-Nov-11
Oh verdammt, Showscreen xD Man nimmt sich so vor das man es nie vergisst und dann passiert es trotzdem xD

Naja, habs mit eurer Hilfe dann jetzt zum laufen bekommen, habe sogar noch ne Rennanimation hinzugefügt, wenn man "Shift" drückt^^

Code (glbasic) Select
// --->Keine Bewegung

   IF Richtung = 0 AND Bewegung = 0                    //Wenn man nach "Rechts" schaut und keine Bewegung macht,....
      DRAWSPRITE WalkRechts[0], Spieler_X, Spieler_Y   //...dann Standbild "Rechts"
   ENDIF

   IF Richtung = 1 AND Bewegung = 0                    //Wenn man nach "Links" schaut und keine Bewegung macht,....
      DRAWSPRITE WalkLinks[0], Spieler_X, Spieler_Y    //...dann Standbild "Links"
   ENDIF


SHOWSCREEN
WEND
END
Das da oben hat dann am Ende noch gefehlt:)

Wenn ich jetzt aber ne Sprunganimation zusätzlich machen will wird es echt unübersichtlich. Ich weiß zwar wie ich das realisieren kann, aber ich muss dann ja erstmal was für Springen auf der Stelle und dann noch für Springen aus dem Rennen raus deklarieren. Und das auch noch 2 mal (für Links und Rechts). Werde da mal irgendwie versuchen das zu vereinfachen^^

Kann man eigentlich auch mehrere gbas-Dateien in ein Projekt einfügen und wenn ja, wie Verknüpft man diese? Weil dann könnte ich ja zum Beispiel eine gbas-Datei nur für die Steuerung machen, usw.
Title: Problem bei Jump and Run
Post by: S.O.P.M. on 2007-Nov-11
Ja das geht. Einfach neue Datei öffnen (nicht Projekt) und dann in der Projektübersicht rechte Maustaste auf die entsprechende Datei und "Datei hinzufügen".
Title: Problem bei Jump and Run
Post by: Lloyd on 2007-Nov-11
Ich hab das jetzt mal versucht und es ging auch, aber das Programm ging nicht^^ Der schreibt jetzt dauernd das der und der Befehl weder in einer Sub, noch in einer Function sind xD Wenn ich die dann aber in eine Function setzte kommt ein Fatal Error und nix geht mehr xD

Und wie kann man das vereinfachen? Hab das versucht mit Types zu machen, aber mehr als Mist ist dabei nicht herausgekommen xD Bitte nicht zu viel verraten, einfach nur nen Gedankenanstoß, sonst lern ich das nie xD
Title: Problem bei Jump and Run
Post by: Schranz0r on 2007-Nov-11
Project öffnen
Dann Datei/Datei/Neu
Diese dann mit "Speichern unter" in den Projectordner speichern.
Neben dem Codefenster auf die Tab-Karte Dateien wechseln

Dadrin dann rechtsklick, Datei hinzufügen und die datei aus dem Projectordner auswählen fertig!

 ;)

Ganz einfach da kannst du dann deine Subs/Functionen reinpacken


Ach, und nochmal ein LOB für den schön Formierten Code !
Echt ein Musterbeispiel an übersicht!
Sehr gute Arbeit!
Title: Problem bei Jump and Run
Post by: Lloyd on 2007-Nov-11
Quote from: Schranz0rProject öffnen
Dann Datei/Datei/Neu
Diese dann mit "Speichern unter" in den Projectordner speichern.
Neben dem Codefenster auf die Tab-Karte Dateien wechseln

Dadrin dann rechtsklick, Datei hinzufügen und die datei aus dem Projectordner auswählen fertig!

 ;)

Ganz einfach da kannst du dann deine Subs/Functionen reinpacken
Das hab ich schon geschafft, hab wohl einfach nur ein paar Probs mit den Funktionen, da die nicht so gut erklärt sind und ich deshalb nicht die geringste Ahnung hab für was die gut sind und warum man die verwenden muss xD Aber schaff ich schon noch^^

Quote from: Schranz0rAch, und nochmal ein LOB für den schön Formierten Code !
Echt ein Musterbeispiel an übersicht!
Sehr gute Arbeit!
Vielen Dank für das Lob:)
Title: Problem bei Jump and Run
Post by: Aniel on 2007-Nov-11
Jetzt wo dus sagst wäre es tatsächlich mal gut wenn man mal ein Tutorial über Funktionen machen würde, weil wenn jemand ohne Programmierkenntnisse herkommt schafft er es nie und nimmer mit denen aus der GLBasic Hilfe das zu verstehen. Die machen das Unverständnis fast noch schlimmer>.<
Title: Problem bei Jump and Run
Post by: Aniel on 2007-Nov-16
Code (glbasic) Select
// ------------------------------------------------------------- //
// -=#  Steuerung der Hauptperson  #=-
// ------------------------------------------------------------- //


SUB HeldSteuerung:

// ------------------------------------------------------------- //
// -=#  Globale Variablen und Datenfelder  #=-
// ------------------------------------------------------------- //


LOCAL Richtung = 0            //Richtung merken (0=Rechts, 1=Links)
LOCAL Geschwindigkeit = 0     //Geschwindigkeit der Bewegung in Pixel/s
LOCAL Sprungkraft = 0         //Wie hoch der Spieler springt in Pixel/s
LOCAL AniVerzoegerung = 100   //Animationsverzögerung
LOCAL Spieler_X = 100         //Position des Spielers auf der X-Achse
LOCAL Spieler_Y = 100         //Position des Spielers auf der Y-Achse

DIM WalkRechts[7]      //7 Bilder pro Animation
DIM WalkLinks[7]       //7 Bilder pro Animation
DIM RunRechts[6]       //6 Bilder pro Animation
DIM RunLinks[6]        //6 Bilder pro Animation
DIM JumpRechts[5]      //5 Bilder pro Animation
DIM JumpLinks[5]       //5 Bilder pro Animation


//Die Bilder werden ins Array (Datenfeld) geladen

   WalkRechts[0] = 0
   WalkRechts[1] = 2
   WalkRechts[2] = 3
   WalkRechts[3] = 4
   WalkRechts[4] = 5
   WalkRechts[5] = 6
   WalkRechts[6] = 7

   WalkLinks[0] = 1
   WalkLinks[1] = 8
   WalkLinks[2] = 9
   WalkLinks[3] = 10
   WalkLinks[4] = 11
   WalkLinks[5] = 12
   WalkLinks[6] = 13

   RunRechts[0] = 14
   RunRechts[1] = 15
   RunRechts[2] = 16
   RunRechts[3] = 17
   RunRechts[4] = 18
   RunRechts[5] = 19

   RunLinks[0] = 20
   RunLinks[1] = 21
   RunLinks[2] = 22
   RunLinks[3] = 23
   RunLinks[4] = 24
   RunLinks[5] = 25

   JumpRechts[0] = 26
   JumpRechts[1] = 27
   JumpRechts[2] = 28
   JumpRechts[3] = 29
   JumpRechts[4] = 30

   JumpLinks[0] = 31
   JumpLinks[1] = 32
   JumpLinks[2] = 33
   JumpLinks[3] = 34
   JumpLinks[4] = 35



// ------------------------------------------------------------- //
// -=#  STEUERUNG  #=-
// ------------------------------------------------------------- //


WHILE TRUE

   LOCAL Bewegung = 0 //Lokale Variable "Bewegung" wird Null gesetzt -> keine Bewegung!


// --->Nach Rechts gehen


   IF KEY (205) AND KEY (203) = 0 AND KEY (42) = 0    //Wenn Taste "Rechts" gedrückt ist und Taste "Links" und "Shift" nicht
      Richtung = 0                   //0 = Rechts
      Bewegung = 1                   //Bewegung findet statt
      Geschwindigkeit = 2            //Geschwindigkeit wird festgelegt
      INC Spieler_X,Geschwindigkeit  //Spieler wird um einen Pixel nach Rechts versetzt

      DRAWSPRITE WalkRechts[WR], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen

      IF Timer < GETTIMERALL()
        INC WR, 1                               //Auf nächstes Sprite schalten
        Timer = GETTIMERALL()+AniVerzoegerung  //Timer erhöhen (Verzögerung)
      ENDIF

      IF WR = LEN(WalkRechts[]) THEN WR = 1  //Wenn WR gleich als die Anzahl der Felder im Array WalkRechts[] ist dann 0

   ELSE
      WR = 0 //WR wird Null gesetzt, da "Rechts" nicht gedrückt ist und somit keine Bewegung stattfindet

   ENDIF


// --->Nach Links gehen


   IF KEY (203) AND KEY (205) = 0 AND KEY (42) = 0  //Wenn Taste "Links" gedrückt ist und Taste "Rechts" und "Shift" nicht
      Richtung = 1                   //1 = Links
      Bewegung = 1                   //Bewegung findet statt
      Geschwindigkeit = 2            //Geschwindigkeit wird festgelegt
      DEC Spieler_X,Geschwindigkeit  //Spieler wird um einen Pixel nach Links versetzt

      DRAWSPRITE WalkLinks[WL], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen

      IF Timer < GETTIMERALL()
        INC WL, 1                              //Auf nächstes Sprite schalten
        Timer = GETTIMERALL()+AniVerzoegerung  //Timer erhöhen (Verzögerung)
      ENDIF

      IF WL = LEN(WalkRechts[]) THEN WL = 1  //Wenn WL gleich als die Anzahl der Felder im Array WalkLinks[] ist dann 0

   ELSE
      WL = 0 //WL wird Null gesetzt, da "Links" nicht gedrückt ist und somit keine Bewegung stattfindet

   ENDIF


// --->Nach Rechts rennen


   IF KEY (205) AND KEY (42) AND KEY (203) = 0    //Wenn Taste "Rechts" und Taste "Shift" gedrückt sind und Taste "Links" nicht
      Richtung = 0                   //0 = Rechts
      Bewegung = 1                   //Bewegung findet statt
      Geschwindigkeit = 7            //Geschwindigkeit wird festgelegt
      INC Spieler_X,Geschwindigkeit  //Spieler wird um einen Pixel nach Rechts versetzt

      DRAWSPRITE RunRechts[RR], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen

      IF Timer < GETTIMERALL()
        INC RR, 1                               //Auf nächstes Sprite schalten
        Timer = GETTIMERALL()+AniVerzoegerung   //Timer erhöhen (Verzögerung)
      ENDIF

      IF RR = LEN(RunRechts[]) THEN RR = 0  //Wenn RR gleich wie die Anzahl der Felder im Array RunRechts[] ist dann 0

   ELSE
      RR = 0 //RR wird Null gesetzt, da "Rechts" und "Shift" nicht gedrückt ist und somit keine Bewegung stattfindet

   ENDIF


// --->Nach Links rennen


   IF KEY (203) AND KEY (42) AND KEY (205) = 0    //Wenn Taste "Links" und Taste "Shift" gedrückt sind und Taste "Rechts" nicht
      Richtung = 1                   //1 = Links
      Bewegung = 1                   //Bewegung findet statt
      Geschwindigkeit = 7            //Geschwindigkeit wird festgelegt
      DEC Spieler_X,Geschwindigkeit  //Spieler wird um einen Pixel nach Rechts versetzt

      DRAWSPRITE RunLinks[RL], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen

      IF Timer < GETTIMERALL()
        INC RL, 1                               //Auf nächstes Sprite schalten
        Timer = GETTIMERALL()+AniVerzoegerung   //Timer erhöhen (Verzögerung)
      ENDIF

      IF RL = LEN(RunLinks[]) THEN RL = 0  //Wenn RR gleich wie die Anzahl der Felder im Array RunLinks[] ist dann 0

   ELSE
      RL = 0 //RL wird Null gesetzt, da "Links" und "Shift" nicht gedrückt ist und somit keine Bewegung stattfindet

   ENDIF
   
   
// --->Nach Rechts springen


// --->Nach Links springen


// --->Keine Bewegung


   IF Richtung = 0 AND Bewegung = 0                    //Wenn man nach "Rechts" schaut und keine Bewegung macht,....
      DRAWSPRITE WalkRechts[0], Spieler_X, Spieler_Y   //...dann Standbild "Rechts"
   ENDIF

   IF Richtung = 1 AND Bewegung = 0                    //Wenn man nach "Links" schaut und keine Bewegung macht,....
      DRAWSPRITE WalkLinks[0], Spieler_X, Spieler_Y    //...dann Standbild "Links"
   ENDIF


SHOWSCREEN
WEND
END

ENDSUB
So, das ist der bisherige Code für die Steuerung der Hauptperson. Jetzt will ich aber auch noch ne Sprunganimation machen, nur stoße ich da auf ein paar Probleme.

Ich habe für die Sprunganimation folgende Bilder in den Arrays:

JumpRechts[0]
(http://img216.imageshack.us/img216/4974/jump1ryk5.png) (http://imageshack.us)

JumpRechts[1]
(http://img253.imageshack.us/img253/9444/jump2rds9.png) (http://imageshack.us)

JumpRechts[2]
(http://img253.imageshack.us/img253/9837/jump3riz8.png) (http://imageshack.us)

JumpRechts[3]
(http://img253.imageshack.us/img253/8717/jump4rsd9.png) (http://imageshack.us)

JumpRechts[4]
(http://img253.imageshack.us/img253/83/jump5rhu7.png) (http://imageshack.us)

Wie man sieht sind die ersten beiden Bilder für den Aufstieg, die Bilder 3 und 4 für den Abstieg und das letzte für das Aufkommen auf dem Boden. Nach dem bisherigen Muster geht es also schonmal nicht, da ich nicht einfach alle hintereinander abspulen kann wie bei den vorherigen.

Meine grundlegende Idee ist, das ich die Variable "Sprungkraft" einfüge um so den Anstieg der Höhe zu definieren. Die Variable "Geschwindigkeit" überlasse ich den anderen IF Abfragen, damit es dynamisch geregelt wird, sprich um so schneller ich laufe, umso weiter springe ich. Wenn "Geschwindigkeit" = 0 ist, wird es eben ein Sprung aus dem Stand.
Dann müsste ich noch eine Abfrage einbauen, die das mit dem Aufstieg/Abstieg regelt, spriche eine Abfrage die prüft ob "Player_Y = Player_Y + Sprungkraft" oder kleiner ist, wenn die Schleife den Punkt erreicht hat, an dem jetzt eigentlich die Abstiegsanimation beginnt (also zwischen JumpRechts[1] und jumpRechts[2]). Ist Player_Y kleiner, dann muss JumpRechts[] wieder auf Null gesetzt werden, wenn es gleich ist, dann muss dass Programm normal weiterlaufen.
Dann brauchen wir natürlich nochmal ne Abfrage, nämlich eine die sich drum kümmert, das während des Abstieges JumpRechts immer zwischen JumpRechts[2] und JumpRechts[3] wechselt und nicht auf JumpRechts[4] springt. Im Prinzip das gleiche wie oben.

Jetzt wie regle ich das mit dem Sprung? Mein Plan war es einfach unter der Bewegung auf der X-Achse einfach noch ein INC/DEC einzufügen halt mit "INC/DEC Player_Y, Sprungkraft". Und für den Abstieg, also wenn Player_Y = Player_Y + Sprungkraft ist dann eben wieder die entsprechende Reduzierung.

Klingt gut in der Theorie, aber ich kriegs net hin xD Kann das mal jemand Coden, oder mir zumindest erklären wie man das eben jetzt in Code umsetzt, weil mir die ganzen Tuts die es schon gibt null weiterhelfen, da es da nur 1 oder max. 2 Bilder als Animation gibt. Würde sicherlich auch anderen Leuten helfen, da man das dann mal als Jump and Run Tutorial reinstellen könnte^^

Danke schonmal im voraus:)

LG
Lloyd
Title: Problem bei Jump and Run
Post by: Schranz0r on 2007-Nov-16
Grundlegend ist es ja so:

1. Absprung merken
2. Maximale Sprunghöhe errechnen (Alte Pos_Y vor dem Sprung + Maximale Sprunghöhe)
3. Wenn die Aktuelle Pos_Y < Max_Sprunghöhe dann DEC Pos_Y,Sprunggeschwindigkeit
4. Wenn erreicht(Max_sprunghöhe) dann INC Pos_Y
5. Wenn Collision mit Boden dann wie gehabt mit Laufen usw..

Also für dich Coden ist so ne sache, dass solltest schon selber machen denke ich .....
Aber bei Problemen Helfe ich gerne!
Title: Problem bei Jump and Run
Post by: Aniel on 2007-Nov-16
Code (glbasic) Select
IF KEY (57)
      Richtung = 0                            //0 = Rechts
      Bewegung = 1                            //Bewegung findet statt
      Sprungkraft = 5                         //Höhe des Sprungs
      SpielerUrsprung_Y = Spieler_Y     //Y-Koordinaten vor dem Absprung wird gespeichert
      MaxSprunghoehe = SpielerUrsprung_Y + Sprungkraft //Maximale Sprunghöhe wird errechnet
     
      IF Spieler_Y < MaxSprunghoehe  //Wenn die aktuelle Y-Position kleiner als die maximale Sprunghöhe ist
         DEC Spieler_Y,Sprungkraft   //Vermindere den Y-Wert von Spieler_Y
         
         DRAWSPRITE JumpRechtsHoch[JRH], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen
         
         IF Timer < GETTIMERALL()
            INC JRH, 1                               //Auf nächstes Sprite schalten
            Timer = GETTIMERALL()+AniVerzoegerung    //Timer erhöhen (Verzögerung)
         ENDIF
         
         IF JRH = LEN(JumpRechtsHoch[]) THEN JRH = 0  //Wenn JRH gleich wie die Anzahl der Felder im Array JumpRechtsHoch[] ist dann 0
         
      ELSE
         JRH = 0 //JRH wird Null gesetzt, da "Space" nicht gedrückt ist und somit keine Bewegung stattfindet
         
      ENDIF
     
      IF Spieler_Y = MaxSprunghoehe  //Wenn die aktuelle Y-Position gleich der maximalen Sprunghöhe ist
         INC Spieler_Y,Sprungkraft   //Erhöhe den Y-Wert von Spieler_Y
         
         DRAWSPRITE JumpRechtsRunter[JRR], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen
         
         IF Timer < GETTIMERALL()
            INC JRR, 1                             //Auf nächstes Sprite schalten                            
            Timer = GETTIMERALL()+AniVerzoegerung  //Timer erhöhen (Verzögerung)
         ENDIF
         
         IF JRR = LEN(JumpRechtsRunter[]) THEN JRR = 0 //Wenn JRR gleich wie die Anzahl der Felder im Array JumpRechtsRunter[] ist dann 0
         
      ELSE
         JRR = 0 //JRR wird Null gesetzt, da "Space" nicht gedrückt ist und somit keine Bewegung stattfindet
         
      ENDIF
   ENDIF
So, so habe ich es jetzt mal gecoded. Funktioniert natürlich nicht, aber ich glaub ich weiß wo der Fehler liegt. Nämlich bei der Abspeicherung des Y-Wertes vor dem Absprung. Nur wie kann ich das anders machen? xD
Momentan habe ich ja "SpielerUrsprung_Y = Spieler_Y" , ist ja rein logisch falsch xD Aber ich weiß net wie sonst xD

PS: Ich habe jetzt 2 DIMs erstellt, eins für die 2 "Hoch-Sprites" und eins für die 3 "Runter-Sprites"^^
Title: Problem bei Jump and Run
Post by: Schranz0r on 2007-Nov-17
Code (glbasic) Select
IF KEY(57) = 0 AND Sprung = FALSE
    Speicher Alte Position
ELSE
     Sprung = TRUE
     usw...
ENDIF
Title: Problem bei Jump and Run
Post by: Aniel on 2007-Nov-17
Das ist mir schon klar, nur WIE kann ich die alte Position speichern-.-
Title: Problem bei Jump and Run
Post by: D2O on 2007-Nov-17
Position y = temp   ????
So hast Du den wert von Y in einer anderen Variable gespeichert und kannst Y weiter bearbeiten.
Brauchst Du denn alten wert, dann lese einfach die variable temp wieder aus.

Edit//
Mal was ganz simples,
sollte auch so lesbar sein:

Code (glbasic) Select
LOADSPRITE "jump1ryk5.png", 0



GLOBAL x = 200,ytemp,yMAX = 100,y = 300

GLOBAL ctrl




WHILE TRUE


IF KEY(57) AND ctrl = 0
ytemp = y
ctrl = 1
ENDIF

IF ctrl = 1 THEN DEC y,1


IF y < ytemp-yMAX THEN ctrl = 2

IF ctrl = 2 THEN  INC y,1

IF y > ytemp AND ctrl = 2
ctrl = 0
y = ytemp
ENDIF






DRAWSPRITE 0,x,y
SHOWSCREEN
WEND
END
Title: Problem bei Jump and Run
Post by: Schranz0r on 2007-Nov-17
Quote from: AnielDas ist mir schon klar, nur WIE kann ich die alte Position speichern-.-
Antwort: in einer Variablen ?!

Code (glbasic) Select
IF KEY(57) = 0 AND Sprung = FALSE
    Alt_Y = Pos_y
ELSE
     Sprung = TRUE
     Max_Hoehe = Alt_Y - Sprunghoehe
     usw...
ENDIF
Title: Problem bei Jump and Run
Post by: Aniel on 2007-Nov-18
Sry, aber hilft mir irgendwie nicht wirklich weiter. Also entweder ich bin zu blöd oder eure Postings passen irgendwie net auf mein Problem......

Aber geschissen druff, ich hab jetzt mal was gecoded:

Code (glbasic) Select
// --->Springen (Rechtsschauend)


   IF KEY (57) AND Richtung = 0
      Bewegung = 1                                     //Bewegung findet statt
      Sprungkraft = 5                                  //Höhe des Sprungs
      SpielerUrsprung_Y = Spieler_Y                    //Y-Koordinaten vor dem Absprung wird gespeichert
      MaxSprunghoehe = SpielerUrsprung_Y + Sprungkraft //Maximale Sprunghöhe wird errechnet


      IF Spieler_Y < MaxSprunghoehe  //Wenn die aktuelle Y-Position kleiner als die maximale Sprunghöhe ist
         DEC Spieler_Y,Sprungkraft   //Vermindere den Y-Wert von Spieler_Y

         DRAWSPRITE JumpRechtsHoch[JRH], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen

         IF Timer < GETTIMERALL()
            INC JRH, 1                               //Auf nächstes Sprite schalten
            Timer = GETTIMERALL()+AniVerzoegerung    //Timer erhöhen (Verzögerung)
         ENDIF

         IF JRH = LEN(JumpRechtsHoch[]) THEN JRH = 0  //Wenn JRH gleich wie die Anzahl der Felder im Array JumpRechtsHoch[] ist dann 0

      ELSE
         JRH = 0 //JRH wird Null gesetzt, da "Space" nicht gedrückt ist und somit keine Bewegung stattfindet

      ENDIF

      IF Spieler_Y = MaxSprunghoehe  //Wenn die aktuelle Y-Position gleich der maximalen Sprunghöhe ist
         INC Spieler_Y,Sprungkraft   //Erhöhe den Y-Wert von Spieler_Y

         DRAWSPRITE JumpRechtsRunter[JRR], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen

         IF Timer < GETTIMERALL()
            INC JRR, 1                             //Auf nächstes Sprite schalten
            Timer = GETTIMERALL()+AniVerzoegerung  //Timer erhöhen (Verzögerung)
         ENDIF

         IF JRR = LEN(JumpRechtsRunter[]) THEN JRR = 0 //Wenn JRR gleich wie die Anzahl der Felder im Array JumpRechtsRunter[] ist dann 0

      ELSE
         JRR = 0 //JRR wird Null gesetzt, da "Space" nicht gedrückt ist und somit keine Bewegung stattfindet

      ENDIF
   ENDIF


// --->Springen (Linksschauend)


   IF KEY (57) AND Richtung = 1
      Bewegung = 1                                     //Bewegung findet statt
      Sprungkraft = 5                                  //Höhe des Sprungs
      SpielerUrsprung_Y = Spieler_Y                    //Y-Koordinaten vor dem Absprung wird gespeichert
      MaxSprunghoehe = SpielerUrsprung_Y + Sprungkraft //Maximale Sprunghöhe wird errechnet

      IF Spieler_Y < MaxSprunghoehe  //Wenn die aktuelle Y-Position kleiner als die maximale Sprunghöhe ist
         DEC Spieler_Y,Sprungkraft   //Vermindere den Y-Wert von Spieler_Y

         DRAWSPRITE JumpLinksHoch[JLH], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen

         IF Timer < GETTIMERALL()
            INC JLH, 1                               //Auf nächstes Sprite schalten
            Timer = GETTIMERALL()+AniVerzoegerung    //Timer erhöhen (Verzögerung)
         ENDIF

         IF JLH = LEN(JumpLinksHoch[]) THEN JLH = 0  //Wenn JLH gleich wie die Anzahl der Felder im Array JumpLinksHoch[] ist dann 0

      ELSE
         JLH = 0 //JLH wird Null gesetzt, da "Space" nicht gedrückt ist und somit keine Bewegung stattfindet

      ENDIF

      IF Spieler_Y = MaxSprunghoehe  //Wenn die aktuelle Y-Position gleich der maximalen Sprunghöhe ist
         INC Spieler_Y,Sprungkraft   //Erhöhe den Y-Wert von Spieler_Y

         DRAWSPRITE JumpLinksRunter[JLR], Spieler_X, Spieler_Y  //Sprite auf den Bildschirm zeichen

         IF Timer < GETTIMERALL()
            INC JLR, 1                             //Auf nächstes Sprite schalten
            Timer = GETTIMERALL()+AniVerzoegerung  //Timer erhöhen (Verzögerung)
         ENDIF

         IF JLR = LEN(JumpLinksRunter[]) THEN JLR = 0 //Wenn JLR gleich wie die Anzahl der Felder im Array JumpLinksRunter[] ist dann 0

      ELSE
         JLR = 0 //JLR wird Null gesetzt, da "Space" nicht gedrückt ist und somit keine Bewegung stattfindet

      ENDIF
   ENDIF
Was ist daran denn jetzt konkret falsch das die Pflaume nicht hüpfen will? xD Er springt zwar, hört aber nicht mehr damit auf..... also er bleibt dauernd in der Schleife wo Y vermindert wird und die zwei Aufsteigbilder sich abwechseln. WIESO?
Title: Problem bei Jump and Run
Post by: Schranz0r on 2007-Nov-18
Du musst abchecken ob die Collision mit dem Boden stattfindet!
Und ob der Sprung grade gemacht wird...
Wenn ja, dann keine AltY = Pos_y und Sprunghöhe errechnen!
Das ist dein fehler!
Aber ich habs ja schon oben mal gepostet, also mehr kann ich auch nicht tun für dich. Wenn du Ratschläge ignorierst und/oder nicht verstehst, kann dir kein Mensch helfen....

Ich bin grad am überlegen ob du schon Reif für ein Jump'n Run bist?!
Weil ein Jump ist eigentlich keine große Kunst zu programmieren.....
Da gibts schon schwerere Sachen die noch auf dich Warten!

Siehe: Gegner, Types in Verbindung mit Dimmaps(Gegner setzen) usw....

Alles kein leichtes!
Title: Problem bei Jump and Run
Post by: Aniel on 2007-Nov-19
Ach so, man wie doof war das denn xD Sry, habs jetzt begriffen und es funktioniert auch, hatte nen massiven Denkfehler wodurch das ganze etwas in die Länge gezogen wurde, sry xD
Title: Problem bei Jump and Run
Post by: Schranz0r on 2007-Nov-19
Super!

Wenn du Screens hast ... weist ja wo du Posten musst :D

PS.: die Figur schaut ja schonmal super aus, von der Grafik her!
Respekt an euren Grafiker!
Title: Problem bei Jump and Run
Post by: Aniel on 2007-Nov-22
Ich hab mal ne Frage^^ Wie ordnet GLBasic die Sprites eigentlich an die Koordinaten? Ich habe hier nämlich 2 verschiedene Sprites:

(http://img231.imageshack.us/img231/8843/walk1rvz5.png) (http://img215.imageshack.us/img215/728/attackexdown6rgt5.png)

Wenn jetzt die Ausrichtung unten Links wäre, wären beide auf der selben "Ebene", sind sie aber nicht, weshalb ich davon ausgehe, das die Ausrichtung Oben Links oder Rechts ist^^

Falls es wer noch nicht verstanden hat hier ein Bild zur Verdeutlichung:
(http://img220.imageshack.us/img220/1283/testui1.th.jpg) (http://img220.imageshack.us/my.php?image=testui1.jpg)

Obwohl beide den gleichen Y-Wert haben, ist die Position unterschiedlich und das ist Scheiße^^ Gibt es irgendeine Möglichkeit die Ausrichtung so zu ändern, das die Sprites immer unten Links ausgerichtet sind?
Title: Problem bei Jump and Run
Post by: Schranz0r on 2007-Nov-22
GETSPRITESIZE Spr, XX, YY

DRAWSPRITE Bild, Player_X, Player_Y -YY


Son ist der Fixpunkt unten links

Oder so ^^

FUNCTION DRAWPLAYER: Bild, X, Y
LOCAL XX,YY
    GETSPRITESIZE Bild,XX,YY
    DRAWSPRITE Bild,X,Y-YY
ENDFUNCTION

;)

Wenn ihr noch einen Berater braucht, ich steh euch gerne bei der Entwicklung bei!! Weil die Grafiken sind mal 1A Sahnemässig!!!!!!!!!!!
Title: Problem bei Jump and Run
Post by: Kitty Hello on 2007-Nov-23
Bei solchen Grafiken würde es sich anbieten zu jeder Grafik eine "Hotspot" Datei anzulegen, die angibt, wo z.B. Mittelpunkt der Füße ist.
DRAWSPRITE x,y, is immer obere linke Ecke. GETSPRITESIZE evtl. von Bedeutung.
Title: Problem bei Jump and Run
Post by: Aniel on 2007-Nov-23
Quote from: GernotFrischBei solchen Grafiken würde es sich anbieten zu jeder Grafik eine "Hotspot" Datei anzulegen, die angibt, wo z.B. Mittelpunkt der Füße ist.
DRAWSPRITE x,y, is immer obere linke Ecke. GETSPRITESIZE evtl. von Bedeutung.
Ne, wäre viel zu viel Arbeit für die Menge an Sprites die wir verwenden^^ Da ist die Lösung von Schranz0r schon besser:)

@Schranz0r: Danke für die schnelle Hilfe:) Und danke für das Angebot, wir kommen eventuell darauf zurück:D

LG
Aniel