Seite 1 von 1

Springfunktion beim JumpnRun

Verfasst: 18.11.2008 13:08
von Dare Devil
Hallo Leute!
Ich versuche mich zurzeit an meinem ersten Jump'n'Run... Hab schon das Menue und den SchnickSchnack programmiert und bin jetzt zum 'ernsten' Teil angelangt... ;) doch leider habe ich keine Ahnung wie ich das 'springen' des Sprites sinnvoll realisieren soll...

Also mit meinem jetzigen Code kann ich bisher nur laufen...
Es gibt vier Frames... tedright1, tedright2, tedleft1, tedleft2... diese verwende ich zur animation... #TEDL und #TEDR sind Konstanten, die sagen, ob man nach rechts geht oder nach links und dient fuer die Funktion ChangeTedPos() - mehr dazu spaeter... hier erstmal die Mainloop

Code: Alles auswählen

tedpos = #ted_right1
tedx = 50
tedy = 354
Repeat
  ExamineKeyboard()
  EventID = WindowEvent()
  
  If EventID = #PB_Event_CloseWindow
    End
  EndIf
  
  If KeyboardPushed(#PB_Key_Right)
    tedpos = ChangeTedPos(tedpos, #TEDR)
    tedx + 5
  ElseIf KeyboardPushed(#PB_Key_Left)
    tedpos = ChangeTedPos(tedpos, #TEDL)
    tedx - 5
  EndIf
  
  
  DisplaySprite(#back1, 0, 0)
  DisplayTransparentSprite(tedpos, tedx, tedy)
  FlipBuffers()
  
  Delay(30)
ForEver
Achja und tedx und tedy sind die positionen des Sprites (tedy ist bei mir bisher immer 354...)
Jetzt zur Funktion ChangeTedPos() die bestimmt, welches Frame gemalt werden soll... Sie wird dann in tedpos uebergeben:

Code: Alles auswählen

Procedure ChangeTedPos(tedpos, richtung)
If tedpos = #ted_right1 And richtung = #TEDR
  ProcedureReturn #ted_right2
ElseIf tedpos = #ted_right2 And richtung = #TEDR
  ProcedureReturn #ted_right1
ElseIf (tedpos = #ted_right1 Or tedpos = #ted_right2) And richtung = #TEDL
  ProcedureReturn #ted_left1
EndIf
If tedpos = #ted_left1 And richtung = #TEDL
  ProcedureReturn #ted_left2
ElseIf tedpos = #ted_left2 And richtung = #TEDL
  ProcedureReturn #ted_left1
ElseIf (tedpos = #ted_left1 Or tedpos = #ted_left2) And richtung = #TEDR
  ProcedureReturn #ted_right1
EndIf
EndProcedure

Ich hab schon mehreres versucht, aber es ist irgendwie nichts 'sinnvolles' dabei rausgekommen...

Kann mir jemand helfen?

Verfasst: 18.11.2008 13:25
von NicTheQuick
Du könntest das Springen z.B. physikalisch korrekt machen, wenn du deinem Ted noch eine
Geschwindigkeit gibst und diese in jedem Frame zu seiner Position hinzuaddierst. Dazu
benötigst du dann auch eine Gravitationskonstante, die deinen Ted immer nach unten
beschleunigt, solange er keinen Boden unter den Füßen hat. So wird er beim Fallen immer
schneller.
Wenn du jetzt springen möchtest, setzt du die Geschwindigkeit einfach nach so, dass er
nach oben springt. Den Rest erledigt die Schwerkraft.

Hier ein Pseudocode:

Code: Alles auswählen

#Gravitation = 0.02   ; am besten ausprobieren, was passt
tedv_x.d = 0.0        ; Geschwindigkeit von Ted in x-Richtung...
tedv_y.d = 0.0        ; ... und y-Richtung
tedp_x.d = 50.0       ; Position von Ted auf der x-Achse...
tedp_y.d = 354.0      ; ...und der y-Achse

Repeat
  if (Ted hat Boden unter den Füßen) then
    if (Sprung-Taste ist gedrückt) then
      tedv_y = -1.0
    else
      tedv_y = 0.0
    endif
    if (Rechts-Taste ist gedrückt) then
      tedp_x + 1.0
    endif
    if (Links-Taste ist gedrückt) then
      tedp_x - 1.0
    endif
  else
    tedv_y = tedv_y + #Gravitation
  endif
  
  tedp_x = tedp_x + tedv_x
  tedp_y = tedp_y + tedv_y
  
  Ted_darstellen()
Until Ende = #True

Verfasst: 18.11.2008 13:56
von Dare Devil
Das funktioniert soweit... nur kann man damit nur gerade nach oben springen und nicht nach links/rechts... ausserdem will ich auch, dass man den Ted wie bei Mario beim fallen auch noch steuern kann, wo er hinfaellt...

Verfasst: 18.11.2008 14:31
von STARGÅTE
das kannst du doch auch mit diesem Ansatz, indem du bei links rechts bewegungen auch nur die Geschwindigkeit änderst, sodass er leicht nach lings fliegt/fällt oder nach rechts