Sprung routine
Übersicht

![]() |
5k41Betreff: Sprung routine |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich habe mich heute mal wieder an meinen PC gesetzt um (mal wieder) mich an einer sprung routine zu versuchen...dabei rausgekomnmen ist das:
BlitzBasic: [AUSKLAPPEN]
irgendwie sieht es aber so eckig aus... ich hatte die selbe frage schon mal vor nem halben Jahr gestellt doch damals hab ich die antwort noch überhaupt nicht verstanden...könnte mir bitte einer erklären wie man sowas "runder" aussehen lässt...thx |
||
![]() |
diGGaGruppenKaspar |
![]() Antworten mit Zitat ![]() |
---|---|---|
du musst es schaffen das der kasten "immer langsamer springt" desto näher er der max-höhe kommt | ||
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und glaubte im Licht der Straßenlampe Den Geist unseres jahrhunderts auf der Straße zu sehen Der uns sagte, daß wir alle am Rande des Abgrunds stehen. - Al Steward Athlon 64 3000+ / Radeon 9600 / 1024mb ddram |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
auf jeden fall ist es so besser:
BlitzBasic: [AUSKLAPPEN]
aber irgendwas fehlt da noch... |
||
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Is zwar was ganz anderes und "etwas" komplexer aber das sollte hübsch rund sein:
Code: [AUSKLAPPEN] fixed=10 if jump=0 and keydown(57) jump=1 jumpcount=1 endif if keydown(203) then x=x-3 if keydown(205) then x=x+3 if jump=1 y=y-3*sin(abs(100-jumpcount*fixed)) ;das fixed steht für die anzahl an steps die dein sprung dauert. ;nimm zum beispiel 10 dann hast du 19 steps wobei der scheitelpunkt bei ;step 10 liegt. kannst also mit jumpcount und step rumexperimentieren. jumpcount=jumpcount+1 if jumpcount=19 then jump=0 endif |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich mache das immer anders.
Das mit der sion Methode ist nciht schlecht, aber langsam und schwer zu kombinieren, mit so manscher Kollisionsprüfung. BlitzBasic: [AUSKLAPPEN] Graphics 640,480,32,2 |
||
between angels and insects |
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eigentlich wollte ich ne Bezierkurve nehmen, deswegen auch das ganz "anders", aber da müsstest du dann alle werte vorher berechnen und in nem array speichern , das wäre wirklich zu langsam...dafür aber eine wirklich perfekt runde sprungbewegung bei der du dann sogar noch spässe einbauen könntest wie maximale höhe des sprungs wird kleiner wenn du dich währenddessen auf der x achse bewegst etc... | ||
Bigfreddy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie findet ihr dies:
BlitzBasic: [AUSKLAPPEN]
|
||
totonak5 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich finde das sieht eher so aus, als ob das objekt gegen eine wand hüpft und darum nicht höher kommt!
... aber vielleicht sollte ich nicht so groß reden wenn ich nichts eigenes poste ... |
||
Just for Fun!
Jesus loves U! |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn man bei der Form und dem Einfachen der Routine des Topicstarters bleiben will, kann mans auch einfach so lösen:
Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() x=0 y=500 maxh=200 ;sprunghöhe v=3 ;wie schnell verläuft der sprung While Not KeyDown (1) If jump=0 And KeyDown(57) Then jump=1 If jump=1 Then a=a+v If a>180 Then jump=0:a=0 If KeyDown(203) Then x=x-3 If KeyDown(205) Then x=x+3 y2=Sin(-a)*maxh Rect x,y2+y,100,100 Text 10,10,jump Flip Cls Wend End Das muss ja nicht unnötig kompliziert und lang werden. 1 min drüber und das sieht doch gleich viel schöner aus ![]() |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
- Zuletzt bearbeitet von Triton am Mo, Mai 09, 2005 21:07, insgesamt 2-mal bearbeitet
hitokiri |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
noch die sinuswerte in einem array speichern da sie begrenzt sind...und es ist perfekt ![]() |
||
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich glaube, bei sowas kann man es in Sachen Geschwindigkeit noch gerade so vertreten, auch mal die Original-Sin-fkt zu nutzen ![]() |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Bigfreddy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@triton: des schaut supi aus...auch wenns für dich eine Zitat: Einfache. ... Routine ist...
ich versteh nur y2=Sin(-a)*maxh nicht (hab erst grad mir sin,cos und tan in der schule angefangen) |
||
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im grunde muss man nur wissen, dass Sinus eine schöne Kurve erzeugt, die am oberen und unteren Wert sich diesem sanft annähert.
y2=Sin(-a)*maxh sin(a) erzeugt positive werte, wenn a > 0 (was hier der fall ist). Da dann der Sprung aber nach unten verlaufen würde, sin(-a). Und das ganze mit maxh multipliziert (sin erzeugt nur werte zwischen 0 und 1), damit man auf die wirkliche Sprunghöhe kommt. ![]() |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Bigfreddy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aha...
naja ich hätts mir eigentlich auch alleine zamreimen können, aber trotzdem thx |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Alle,
ich würde das ganz ohne Sin/Cos oder anderen Funktionen machen. Wenn man die 'Flugbahn' vorberechnet, dann hat man weniger Chancen eine vernünftige Reaktion auf unerwartete Ereignisse zu machen. Zum Beispiel: Spielfigur trifft auf ner Bauer/Gegner oder sonst was. Da ich mich immer wieder darüber aufrege, habe ich eben mal ein Code geschrieben der so alle Probleme beseitigen sollte. Das einzige manko ist, daß die Kollisionsabfrage im Beispiel per ReadPixel gemacht wird. Ist natürlich unschön sowas, ich weiß. Aber Images auf Webspace und son Kramm hab ich nicht. Gesprungen wird mit [SPACE] und das nur wenn Boden unter den Füssen vorhanden ist. Die 'Flugbahn' kann durch äussere Einflüsse wie Mauer/Boden/Decke in Echtzeit beeinflusst werden. Code: [AUSKLAPPEN] Graphics 640,480,16,2 SetBuffer BackBuffer() xp#=40 ; X-Position yp#=40 ; Y-Position yg#=0 ; Y-Geschwindigkeit While Not KeyHit(1) Color 64,64,64 ; Spiel(Feld/Plattform) Farbe Rect 0,0,20,480,1 ; Spielfeldbegrenzung linker Balken Rect 619,0,20,480,1 ; Spielfeldbegrenzung rechter Balken Rect 20,459,600,20,1 ; Spielfeldbegrenzung unterer Balken Rect 299,200,320,20,1 ; Plattform rechts Rect 20,330,200,20,1 ; Plattform links For q=460 To 480:Line 200,q,620,q-40:Next ; Schräge Plattform If KeyDown(203) Then xp=xp-2 ; Spieler nach links Verschieben If KeyDown(205) Then xp=xp+2 ; Spieler nach rechts Verschieben If KeyDown(57) And ReadPixel(xp,yp+13)<>-16777216 Then yg=-6 ; Spieler Springen lassen wenn Boden unter den Füssen yg=yg+0.1 ; Eine Gravitation damit der Spieler auch Richtung Boden beschleunigt wenn er sich in der Luft aufhällt yp=yp+yg ; Position wird von der Geschwindigkeit beeinflusst, Wird benötigt für weichere Bewegungen If Not ReadPixel(xp-1,yp+5)=-16777216 Then xp=xp+2 If Not ReadPixel(xp+11,yp+5)=-16777216 Then xp=xp-2 If Not ReadPixel(xp+5,yp-1)=-16777216 Then yp=yp-yg:yg=-yg/4 If Not ReadPixel(xp,yp+11)=-16777216 Then yp=yp-yg:yg=-yg/4:yp=yp-0.5 Color 255,255,255 ; Spielerfarbe weiß Rect xp,yp,10,10,1 ; Spielerkörper zeichnen Flip Cls Wend End |
||
krux |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie wärs mit kurz und einfach
Code: [AUSKLAPPEN] graphics 800,600,16,0 setbuffer backbuffer() posx = 400 posy = 300 xspeed# = 0 yspeed# = 0 while not keyhit(1) cls if posy >= 550 then posy = 550 yspeed = 0 endif if keyhit(57) and posy = 550 then yspeed = -10 endif yspeed = yspeed + 0.1 posy = posy + yspeed oval posx-10,posy-10,20,20 flip wend end |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo krux,
hast du dir meinen Code mal auch angeschaut? Oder zumindest mal gestartet? Dann wirst du sehen, daß mein Code sich von der Logik von deinem garnicht unterscheidet, sondern das in meinem zusätzlich noch eine Steuerung, realistischere 'Abprallphysik', Kolisionsabfrage und Kommentarzeilen eingebaut ist. Naja, die Kollisionsabfrage ist im Beispiel mit ReadPixel gemacht, nicht schön, aber soll nur ein Beispiel sein. In einem Spiel würde ich das anders machen. Immerhin lässt die Kollisionsabfrage aber leicht schräg verlaufende Böden zu... Ich wollte nur davon abraten mit irgendwelchen Wurfparabeln, if/then Anweisungen oder sonst son Quatsch rum zu hantieren. |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: sondern das in meinem zusätzlich noch eine Steuerung, realistischere 'Abprallphysik', Kolisionsabfrage und Kommentarzeilen eingebaut ist.
klingt ein bißchen wie : meiner ist größer UND dicker!! und überhaupt nich so krumm wie deiner ... ich finde : wenns passt soll er machen wie ers für richtig hält... und um if/then bist nichmal du drumrum gekommen ... is doch nett das es für ein problem soviele lösungen gibt ... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Alfadur,
na wenn du meinst... |
||
krux |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ hectic
sorry nee ich hab dein code nich durchgelesen ich hab nur diesen endlosen quelltext gesehen und wollte das Problen direkt und kurz abhaken. Jedenfalls ist es wichtig eine Variable für die Vertikalbewegung zu haben die sich immer zur Spielerposition Addiert und ausschieslich dort veränderungen vorzunemen wie z.b. die einwiorkende Schwerkraft |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group