Figur kommt nach dem springen nicht auf den boden
Übersicht

![]() |
BlackPhönixBetreff: Figur kommt nach dem springen nicht auf den boden |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, dass ich mit diesem alten Problem nerve aber ich bekomme das springen einfach nich hin.
Das grundlegende hab ich jetzt verstanden und es müsste auch funktionieren(müsste), aber es klappt immer noch nicht. Ich hab auch schon im forum gesucht aber bin nicht wirklich weiter gekommen. Der Code müsst doch so funktionieren, oder ? : Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() Global y=480 Global x=60 x7=1 y7=-160 y1=480 x1=60 Global frametimer=CreateTimer(60) SeedRnd MilliSecs() AppTitle "Freddys Adventures" Global springen, sprungdauer, sprungart Global Hintergrund1= LoadImage ("Freddy_Adventures_Hintergrund1.bmp") ; Um die Bilder zu laden. Global Hero= LoadImage ("Freddy1.bmp") Repeat If KeyDown(200) Then y=y-1 ; Die Steuerung von Freddy. If KeyDown(203) Then x=x-1 If KeyDown(205) Then x=x+1 If KeyDown(208) Then y=y+1 If KeyDown(203) Then x7=x7+1 ; Um die Täuschung vom laufen durch die Welt zu simulieren. If KeyDown(205) Then x7=x7-1 If KeyDown(200) Then y7=y7+1 If KeyDown(208) Then y7=y7-1 If KeyDown(203) And KeyDown (29) Then x=x-3 ; Die Funktion zum schneller laufen. If KeyDown(205) And KeyDown (29) Then x=x+3 If KeyDown(203) And KeyDown (29) Then x7=x7+3 If KeyDown(205) And KeyDown (29) Then x7=x7-3 ; Die Funktion zum Springen(Noch nicht fertig) If KeyHit(44) Then springen = True springen = 1 End If If springen = True Then sprungart = 1 If sprungart = 1 Then sprungdauer = sprungdauer + 1 If sprungdauer = 10 Then sprungart = 2 Else If sprungart = 2 Then sprungdauer = sprungdauer - 1 If sprungdauer = 0 Then springen = False End If End If ClsColor 0,0,0 Cls DrawImage Hintergrund1,x7,y7 ; Um die Bilder anzuzeigen. DrawImage Hero,x,y-sprungdauer Flip Forever End |
||
Mfg Chris |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Clscolor musst du nicht in der Schleife setzen solange du nichts an der Farbe änderst
2. If KeyHit(44) Then springen = True springen = 1 End If Hier setzt du springen auf 1 und dann gleich nochmal auf 1 ![]() 3. Hier ein richtiger code, nicht abschreiben sondern verstehen ^^ Code: [AUSKLAPPEN] Graphics 640,320,32,2
x=220 y=160 SetBuffer BackBuffer() While Not KeyHit(1) Cls If KeyHit(57) And springen=0 Then ;WENN LEERTASTE und wir gerade nicht am springen sind springen=1 End If If springen=1 y=y/1.1 ; da nun die leertaste gedrückt wurde machen wir Y immer kleiner EndIf If y=5 ; falls wir oben angekommen sind springen=3 ; setzen wir springen auf 3, das hat zur folge das oben nicht mer y verkleindert wird EndIf If springen=3 ;SONDERN y=y*1.11 ; das Y wieder grösser wird (die figur wieder runtergeht EndIf If y>160 And springen=3 ;falls wir bei 160 angekommen sind (unser "boden") und wir im fall sind (springen=3) springen=0 ; Springen auf 0 setzen EndIf If KeyDown(205) x=x+2 ;Links rechts laufen ermöglichen If KeyDown(203) x=x-2 Line 0,180,640,180 Text 0,0," y:"+y+" x:"+x Rect x,y,20,20 Flip 30 Wend Das ganze könnte man noch in eine schöne Funktion packen (der übersichtlichkeits wegen), aber das überlass ich dir ![]() mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Cyderic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast die IF Sätze recht ungünstig zusammengeschrieben. Zumindest ich verliere komplett den Überblick. Aber wenn man das dann mal eingerückt hat, merkt man das die IF Anweisungen falsch verschachtelt sind. Wenn wir uns nun mal die Mühe geben und das doofe Then weg lassen und stat dessen lieber einen Absatz machen, sehen wir das gleich viel schöner:
BlitzBasic: [AUSKLAPPEN] If springen = True Nun können wir uns das vernünftig ansehen. Was steht da also...Wenn springen 1 ist dann soll sprungart auf 1 gestellt werden. Okay...wenn Sprungart 1 ist soll sprungdauer um 1 erhöht werden. Leuchtet ein... Und jetzt kommt der Knackpunkt: Du schreibst wenn sprugndauer 10 ist dann soll sprungart gleich 2 sein um wieder runter zu zählen. Das ist ansich richtig, aber dann schreibst du: Wenn sprungdauer NICHT 10 ist (ElseIF) dann soll sprungart 2 sein. Das ist einfach eine falsche Verschachtelung. Wenn wir das ändern und gleichzeitig Variablen sparen wollen sieht es dann so aus: BlitzBasic: [AUSKLAPPEN] ; Die Funktion zum Springen(Fixed by Cyd) PS: Zum springen ist ozzis Code natürlich geeigneter. Ich wollte dir hier aber nur einmal deinen Fehler vor Augen führen und hoffe dass du es verstanden hast ![]() |
||
![]() |
BlackPhönix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, funktioniert gut.
Aber er springt zu hoch. Ich habe schon den y-wert geändert und dabei ist mir aufgefallen, dass er immer bis zum oberen Bildschirmrand hüpft egal wie ich die y-koordinate ändere. Der sprung fängt halt nicht unten an.(Ich könnte ihn unten anfangen lassen, aber dann ist mein hintergrund nicht mehr ganz im bild) Danke für rückmeldungen. |
||
Mfg Chris |
![]() |
faeX |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Lösung von ozzi finde ich fragwürdig, ehrlich gesagt... ![]() Ich an deiner Stelle würde sowas machen: ![]() ![]() ![]() ![]() BlitzBasic: [AUSKLAPPEN]
Spiel mit den Konstanten ein bisschen rum, dieser Sprung ist um einiges bequemer und realistischer als die andere Lösung ![]() |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@faeX
Naja das ist wohl geschmackssache ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group