Sprung

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Inso

Betreff: Sprung

BeitragSo, Nov 27, 2011 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu!
Also ich hab jetzt ne ganze weile mich durch dieses und andere foren gewühlt und leider zu dem thema nicht viel gefunden, und eigentlich nichts was mir weiter hilft.

Ich bin gerade dabei meinen Spieler springen zu lassen, was er auch tut.

Code: [AUSKLAPPEN]
   
   If KeyHit(KEY_SPACE)
   If jumping= 0
   jumping= 1
   EndIf
   EndIf
   
If jumping= 1
If jumping_frame < jumping_frame_max
jumping_frame = jumping_frame + 1
TranslateEntity player,0,jumping_speed,0
Else
jumping= 0
jumping_frame = 0
EndIf
EndIf


Solang jumping = 1 ist, ist die gravitation ausgestellt, allerdings hab ich jetzt das problem, dass der spieler fliegen kann, weil er nochmals springen kann, sobald der spieler am obersten punkt des sprunges angekommen ist, also wenn jumping = 0 gesetzt wird.
ich könnte jetzt einfach checken ob der spieler den boden berührt, wenn nicht: kein sprung möglich
würde funktionieren, wenns nicht einen haken geben würde: ich will auch auf andere objekte rauf springen können, und wieder runter springen können, allerdings funktioniert da die sache nicht, mit der collision, da ich mich dann quasi an ne wand stellen kann, und an ihr hoch "klettern" könnte..

ich hoffe ihr versteht.. wie löse ich das ganze am besten?
mir fällt einfach nichts ein Neutral
ich müsste checken ob der spieler mit der oberen fläche von irgendwas kollidiert, mit seiner unterseite natürlich, dann ist ein sprung möglich, sonst nicht.. aber wie krieg ich das hin?

ZEVS

BeitragSo, Nov 27, 2011 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso machst du es nicht... realistisch? Schöne Grüße von der Physik.
Die Sache sieht wie folgt aus: Wenn der Spieler auf dem Boden steht, zieht die Erde an ihm, dass er nicht abheben kann. Wenn er jetzt abspringt, holt er sich mit seinen Beinen einen Impuls, und überwindet damit die Anziehungskräfte. Während er jetzt durch die Trägheit immer weiter nach oben steigt, zehrt die Anziehungskraft permanent an ihm, sodass er immer langsamer wird und schließlich zu Boden fällt.
Seine Geschwindigkeit nach oben kannst du einfach in einer Variable speichern. Wenn er nicht auf dem Boden steht, subtrahierst du permanent davon die Anziehungskraft. Wenn er abspringt, dann setzt du die Variable einmal auf einen hohen Wert. In jedem Frame zur Y-Position addieren - und du hast das perfekte Sprungverhalten.

BlitzBasic: [AUSKLAPPEN]
Global speedY#, playerY#
;mainloop
If KeyHit(KEY_SPACE) Then
If playerY < .001 Then ;player steht auf dem Boden; wendet Float-Ungenauigkeiten ab
speedY = 10
EndIf
EndIf
playerY = playerY+speedY ;player bewegen
If playerY < 0 Then ;player bleibt auf dem Boden
playerY = 0
speedY = 0
Else
speedY = speedY-.1 ;player steigt langsamer oder fällt schneller
EndIf
PositionEntity EntityX(player), playerY, EntityZ(player) ;player positionieren
;/mainloop


ZEVS

biggicekey

BeitragSo, Nov 27, 2011 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
das löst sein Problem aber nicht wenn er von Objekten (wenn Y>0.001)

Hierzu musst du mit collisions arbeiten. Ggf testen ob die Kollision wirklich unter dem spieler ist, und nicht seitlich, wie wenn er an eine Mauer springt.
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]
 

Inso

BeitragSo, Nov 27, 2011 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
hey, danke - klingt schonmal richtig gut, allerdings weiß ich damit immernoch nicht ganz, wann der spieler nun springen darf und wann nicht.
also meine map ist einfach nur eine ebene, auf der objekte wie zäune, bäume usw stehen.
jetzt will ich dass man über zäune springen kann, auf steine springen kann usw,
ich möchte aber nicht dass man sich einfach an dieses objekt stellt (z.B. eine mauer) und dann einfach mehrfach springen drückt und somit dann "fliegt"

wenn ich jedoch die collision abfrage, also quasi ob der spieler gelandet ist würde das programm, wenn ich an einer mauer steh, das ganze als "hat kontakt zu objekt, darf also springen" gewertet werden, wie umgehe ich das?

ZEVS

BeitragSo, Nov 27, 2011 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht mit CollisionY. Wenn der Y-Wert der Kollisionsstelle relativ weit unter dem Player liegt, ist es ergo der Boden oder ein Stein oder was auch immer, Hauptsache von unten, und der Player darf springen.

ZEVS
 

Inso

BeitragSo, Nov 27, 2011 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
hab mir jetzt den befehl mal etwas angesehen, aber so richtig verstehn tu ich ihn nicht, im endeffekt gibt mir

CollisionY(player) quasi den wert aus an dem player auf der Y achse mit irgendetwas kollidiert,
aber wie kann ich mit diesem wert jetzt bestimmen ob der spieler springen darf, oder nicht? steh ich aufm schlauch?

ZEVS

BeitragSo, Nov 27, 2011 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Solange die Kollision unterhalb der Players stattfindet, kollidiert er mit etwas, das unter ihm ist. Wenn die Kollision relativ weit unter ihm ist, heißt das, dass er mit einem seiner ganz untersten Teile (also seinen Füßen) kollidiert. Alternativ kannst du mit CollisionTriangle feststellen, ob er mit einem Fußsohlen-Triangle aufgekommen ist (oder CollisionSurface mit eigener Fußsohlen-Surface).

ZEVS
 

Inso

BeitragMo, Nov 28, 2011 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, danke für die Ansätze. Hab n Paar Stunden rumgewerkelt und es im endeffekt geschafft Smile
Hab aber linepick dafür verwendet

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group