ProfilProfil
 Registrieren
 Login
Bild der WocheBild der Woche

(von Backslider)
Kommentare (0)
****

Weitere
User onlineBenutzer online
Gäste online: 4
Mitglieder online: Keine
Registrierte Mitglieder: 2116
Neustes Mitglied: onkel_keks

Merkwürdiger Sprungbug

Neue Antwort erstellen
 

 

Autor Nachricht
 
 
Gambit_Grey
Neuling


Anmeldedatum: 28.04.2012
Beiträge: 9

Antworten mit Zitat
BeitragVerfasst am: 28.04.2012, 16:08    Titel: Merkwürdiger Sprungbug

Hallo zusammen,

bin auf ein merkwürdiges Problem bei meinem Jumpcode gestoßen, ich habe schon einiges probiert aber einfach keine lösung gefunden.

Der Code sieht so aus: (im internet gefunden, eigentlich perfekt für mein Spiel)
// jiffy heißt der player

Code:

            if (jumping)
            {
                jumpspeed += 1;
                jiffypos.Y += jumpspeed;
               
                if (jiffypos.Y >= startY)
                {
                    startY = jiffypos.Y;
                   
                    if (falling == false)
                    {
                        jumping = false;
                    }
                }
            }
            else
            {
                if (kstate.IsKeyDown(Keys.W) && kstate.IsKeyDown(Keys.Space))
                {
                    jumpspeed = -14;//Give it upward thrust 
                    jumping = true;
                }
            }


Das Problem ist jetzt, die spielfigur haut sich in den boden hinein, manchmal nicht sehr tief, aber manchmal fällt er sogar komplett durch, dabei dürfte das nicht sein.

Wäre echt froh wenn mir einer damit helfen könnte, hänge schon seit einem ganzen Tag an diesem Problem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


JeReT
Member


Anmeldedatum: 19.07.2007
Beiträge: 3248
Wohnort: µnchen

Antworten mit Zitat
BeitragVerfasst am: 28.04.2012, 17:09    Titel:

Das Problem lässt sich lösen, indem du herausfindest, wie tief dein opbjekt im anderen steckt ("penetration distance") und dann die spielfigur um diesen wert weiter nach oben setzt.
_________________
Idea Shapes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger ICQ-Nummer


Gambit_Grey
Neuling


Anmeldedatum: 28.04.2012
Beiträge: 9

Antworten mit Zitat
BeitragVerfasst am: 28.04.2012, 17:32    Titel:

das hatte ich schon versucht, es sieht aber merkwürdig aus wenn die figur nach dem sprung im boden steckt und dann wieder hochgesetzt wird. ich hab auch schon jede menge abfragen getestet, es dürfte einfach nicht passieren oder ich kann einfach nicht logisch denken. mh
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


JeReT
Member


Anmeldedatum: 19.07.2007
Beiträge: 3248
Wohnort: µnchen

Antworten mit Zitat
BeitragVerfasst am: 28.04.2012, 18:06    Titel:

man darf das ja auch nicht sehen, dass die figur überhaupt im boden steckt.
Du musst entweder sofort nach dem bewegungs-code (da schließe ich sämtliche arten von beweung ein. auch "freier fall") auf kollision prüfen und dann ggf. die figur sofort aus dem boden wieder raus schieben, oder du blickst in die zukunft, stellst so fest, ob eine kollision stattfinden wird und verringerst die geschwindigkeit deiner Figur damit sie gar nicht erst in das objekt hineingerät.

vom prinzip sehr ähnlich, allerdings ist erster ansatz wohl ein wenig einfacher umzusetzen.
_________________
Idea Shapes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger ICQ-Nummer


Gambit_Grey
Neuling


Anmeldedatum: 28.04.2012
Beiträge: 9

Antworten mit Zitat
BeitragVerfasst am: 28.04.2012, 18:58    Titel:

vielen dank, werde ich später versuchen. wundert mich trotzdem noch warum die figur in den boden gerät.

guten abend.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


sorry
Member


Anmeldedatum: 26.04.2011
Beiträge: 257

Antworten mit Zitat
BeitragVerfasst am: 28.04.2012, 19:02    Titel:

Das ist ganz logisch. jumpspeed wird ja immer auf die Y-Position des Spielers addiert. Jetzt stell dir vor der Spieler befindet sich 1Pixel über dem Boden. Der Sprung wird korrekterweise noch nicht beendet. Da der Player schon recht weit gefallen ist, ist aber die Sprunggeschwindigkeit recht hoch, z.B. 20. Jetzt addierst Du auf die Y-Position 20 Pixel drauf, dadurch ist der Spieler dann 19Pixel im Boden "versunken". Jetzt hört der Sprung auch auf, aber der Player ist eben immer noch im Boden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Gambit_Grey
Neuling


Anmeldedatum: 28.04.2012
Beiträge: 9

Antworten mit Zitat
BeitragVerfasst am: 28.04.2012, 19:52    Titel:

danke, habs endlich hinbekommen, ne ganz einfach abfrage. er soll nur weiter zur spielerposition addieren wenn jumpspeed kleiner als ein bestimmter wert ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


sorry
Member


Anmeldedatum: 26.04.2011
Beiträge: 257

Antworten mit Zitat
BeitragVerfasst am: 28.04.2012, 21:13    Titel:

Versinken kann der Player dann aber immer noch. Wenn er nicht versinken soll, müsste man bei deiner Methode Jumpspeed auf 1 begrenzen und das macht ja überhaupt keinen Sinn. Versuch doch mal JeReT's Vorschlag umzusetzen. Dazu musst Du einfach nach dem if(jiffpos.Y >= startY) statt startY = jiffpos.Y jiffpos.Y = startY schreiben. Was das so wie Du das gemacht hast soll verstehe ich sowieso nicht so ganz.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Gambit_Grey
Neuling


Anmeldedatum: 28.04.2012
Beiträge: 9

Antworten mit Zitat
BeitragVerfasst am: 29.04.2012, 10:09    Titel:

Ich bin ja eigentlich der Designer im Team, jetzt starten wir eigene kleine Projekte zur Übung, damit wir uns gegenseitig unter die Arme greifen können.

Funktioniert jedenfalls jetzt soweit, is aber trotzallem eigentlich ne blöde Idee von mir, wegen der Gravitation. Ich bau das jetzt mal so um das die Gravitation den Fall flüssig ablaufen lässt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


JacksAll
Member


Anmeldedatum: 31.10.2011
Beiträge: 18

Antworten mit Zitat
BeitragVerfasst am: 14.05.2012, 21:06    Titel:

Naja ich kann dich beruhigen, du solltest die If-Abfrage nicht auf == false enden lassen sondern den Sprung ausschalten wenn er fällt, das klappt Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


KatoGrinsihara
Member


Anmeldedatum: 27.10.2007
Beiträge: 897

Antworten mit Zitat
BeitragVerfasst am: 15.05.2012, 07:08    Titel:

Wobei
Code:

if (falling == false)

auch so nee Sache ist.

Besser wäre
Code:

if (!falling)

_________________
Alles Komplizierte ist unnötig.
Alles Notwendige ist einfach - genau wie mein automatisches Gewehr.
(Michail Timofejewitsch Kalaschnikow, russischer Ingenieur)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


JacksAll
Member


Anmeldedatum: 31.10.2011
Beiträge: 18

Antworten mit Zitat
BeitragVerfasst am: 15.05.2012, 18:06    Titel:

allerdings ist das reine geschmackssache, würde ich doch mal behaupten, ob ich jetzt den boolean invertiere oder ihn mit false vergleiche, dürfte wohl kaum unterschiede hergeben. allerdings nutze ich auch die verneinungsmehtode mit !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Beiträge der letzten Zeit anzeigen:   
 
Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de