Problem bei Jump and Run

Previous topic - Next topic

Schranz0r

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Aniel

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?

Schranz0r

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!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Aniel

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

Schranz0r

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!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Aniel

Ich hab mal ne Frage^^ Wie ordnet GLBasic die Sprites eigentlich an die Koordinaten? Ich habe hier nämlich 2 verschiedene Sprites:



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:


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?

Schranz0r

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!!!!!!!!!!!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

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.

Aniel

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