Geschwindigkeit/Beschleunigung
Übersicht

timinatorBetreff: Geschwindigkeit/Beschleunigung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich wollte mal fragen ob jemand eine gut Lösung kennt um meshs zu beschleunigen.
Also das der nich direkt auf Höchstgeschwindigkeit kommt. Hab schon mal was mit Gangstufen gesehen aber das is mir ein bischen zu aufwendig. Ich dachte da an so was: BlitzBasic: [AUSKLAPPEN]
Das klappt aber leider nicht so. MFG timinator ![]() |
||
![]() |
empet |
![]() Antworten mit Zitat ![]() |
---|---|---|
was passiert den dann? vielleicht hilft ein bischen mehr info... | ||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Afaik beschleunigt ein Auto langsamer je schneller es ist, das heißt, dein +1 da sollte nicht konstant sein, sondern z.B. 10 / speed.
So beschleunigt dein "mesh" zuerst schnell, und dann immer langsamer. mfg, Tennisball p.s.: Off Topic mal wieder? |
||
timinator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@empet: Dann bewegt sich das Objekt gar nicht mehr.
Versteh nicht warum. |
||
- Zuletzt bearbeitet von timinator am Mo, Jun 21, 2010 18:53, insgesamt 2-mal bearbeitet
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
weil du dann mit Float-Variablen arbeiten musst, sprich speed#. | ||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
timinator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
auch wenn ich mit float arbeite macht der immer noch nix. ![]() |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
speed ist ja auch am Anfang 0
10 / 0 gibt ja bekanntlich einen Error. Da musst du eben ein bisschen schummeln und speed eine 1 bzw. -1 zuweisen, wenn speed 0 ist und man eine Taste drückt. |
||
timinator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also wenn ich das so mache :
BlitzBasic: [AUSKLAPPEN]
und dann vor drücke fährt der sobald ich vor los lasse mit gleicher Geschwindichkeit nach hinten und andersrum. |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] While KeyDown(200) if speed#=0 then speed# = 1 speed#=speed#+10/speed# Wend While KeyDown(208) if speed#=0 then speed# = -1 speed#=speed#+10/speed# Wend MoveEntity objekt,0,0,speed# Du musst speed auf 1 oder -1 setzen, wenn speed 0 ist, nicht dazurechnen und auch nicht jedesmal. außerdem darfst du nicht speed#=10/speed# machen, denn dann würde er sich verlangsamen, nicht beschleunigen. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Machs mal mit if then statt while wend. Das läuft ja rasend schnell durch, das kleine Schleifchen. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
timinator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also wenn ich das so mache wie Tennisball, macht der gar nix.
Und wenn ich das ganze dann mit if anstat while wird der immer schneller sobald ich ab drücke un ich kann den nicht mehr anhalten. |
||
Chaos Melone |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich würd das auf die Schnelle etwa so machen...
Code: [AUSKLAPPEN] Repeat If KeyDown(200) then speed#=speed#+1 If KeyDown(208) then speed#=speed#-1 if speed#<=0 then speed# = 0 Moveentity Objekt,0,0,speed# Forever bei Moveentity kannst dir ja irgendeine komische Formel einfallen lassen, die dein Objekt so beschleunigen lässt wie du willst... |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das stimmt, da ist auch ein Fehler im Code.
Code: [AUSKLAPPEN] if speed#=0 then speed# = -0.1
speed#=speed#+10/speed# muss heißen Code: [AUSKLAPPEN] if speed#=0 then speed# = 0.1
speed#=speed#-10/speed# (beim unteren Block) Und du musst es natürlich mit if machen, denn wenn du sowas noch in deiner main-Schleife drin hast, ist das alles andere als in Ordnung. |
||
timinator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab jetzt darauf verzichtet, also das mit ...10/speed# ...
und es klappt warum bin ich da vorher nicht drauf gekommen. ![]() BlitzBasic: [AUSKLAPPEN]
|
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Tennisball
Der Ansatz von Chaos Melone ist besser als deiner. Bei deiner Formel kann das Auto gar nicht stehen bleiben und wird um so stärker abgebremst, je langsamer es fährt. Hier ist mein Versuch, den Fahrtwind nachvollziehbar mit einzubringen: Eine Beschleunigung ist eine Änderung der Geschwindigkeit über einen gewissen Zeitraum. Für eine Berechnung kann man sagen, dass pro Frame dies gerechnet wird: Code: [AUSKLAPPEN] Geschwindigkeit=Geschwindigkeit+Beschleunigung
Wenn "Beschleunigung" positiv ist, wird das Auto schneller; wenn "Beschleunigung" negativ ist, wird das Auto langsamer. "Beschleunigung" hängt von zwei Faktoren ab: -Gibt man Gas? -Wie ist der Fahrtwind? Wenn man "Gas gibt", wird das Auto - je nach Motor mehr oder weniger - schneller: Code: [AUSKLAPPEN] Beschleunigung=gebeGas*irgendetwasPSmaessiges
Der Fahrtwind wirkt dem Gasgeben entgegen, wird also abgezogen. Wovon wirkt seine Wirkung ab? -der Geschwindigkeit des Autos (Wenn man nach draußen geht und Testmessungen macht, stellt man fest, dass dieser Wert eigentlich quadriert werden muss.) -der Windschnittigkeit des Autos Das führt zu dieser Formel für die Gesamtbeschleunigung: Code: [AUSKLAPPEN] Beschleunigung=gebeGas*irgendetwasPSmaessiges-Geschwindigkeit*Windschnittigkeit
Ich hoffe, dass ich es nicht zu kompliziert gemacht habe. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
In der Physik ist es so, dass schnelle Objekte durch den quadratisch ansteigenden Luftwiderstand stärker gebremst werden. Eine so simple Berechnung hat nur den Nachteil, dass sehr langsame Bewegungen dann kaum noch gebremst werden. Das heißt: Das dann so ein Objekt nahezu ewig braucht bis es dann komplett zum stehen kommt. Es fehlt noch ein stetiger Bremseffekt der bis zum Stillstand anhält. Ich hab mal eben was versucht. Vielleicht hilft es ja:
Code: [AUSKLAPPEN] Graphics 800,100,0,2
SetBuffer BackBuffer() Local Pos#=200 Local Speed#=0 Local Temp#=0 While Not KeyHit(1) If KeyDown(203) Then Speed=Speed-0.5 If KeyDown(205) Then Speed=Speed+0.5 If Abs(Speed)>1 Then Temp=Sgn(Speed) Else Temp=Speed ; *0.99 | setzt einen linear aufbauenden 'Luftwiederstand' ; -Temp*0.05 | setzt einen permanenten Bremseffekt ein 'Reibung' Speed=Speed*0.99-Temp*0.1 Pos=Pos+Speed Rect Pos,0,20,20,1 If Pos>800 Then Pos=-20 If Pos<-20 Then Pos=800 Text 20,20,"CURSOR links/rechts" Text 20,40,"Speed: "+Speed Flip Cls Wend End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group