Geschwindigkeit/Beschleunigung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

timinator

Betreff: Geschwindigkeit/Beschleunigung

BeitragMo, Jun 21, 2010 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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]

While KeyDown(200)
speed=speed+1
Wend

While KeyDown(208)
speed=speed-1
Wend

MoveEntity objekt,0,0,speed


Das klappt aber leider nicht so.

MFG timinator Very Happy

empet

BeitragMo, Jun 21, 2010 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
was passiert den dann? vielleicht hilft ein bischen mehr info...

Tennisball

BeitragMo, Jun 21, 2010 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jun 21, 2010 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragMo, Jun 21, 2010 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
weil du dann mit Float-Variablen arbeiten musst, sprich speed#.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

timinator

BeitragMo, Jun 21, 2010 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
auch wenn ich mit float arbeite macht der immer noch nix. Sad

Tennisball

BeitragMo, Jun 21, 2010 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jun 21, 2010 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
also wenn ich das so mache :

BlitzBasic: [AUSKLAPPEN]

While KeyDown(200)
speed#=speed#+0.1
speed#=10/speed#
Wend

While KeyDown(208)
speed#=speed#-0.1
speed#=10/speed#
Wend

MoveEntity objekt,0,0,speed#


und dann vor drücke fährt der sobald ich vor los lasse mit gleicher Geschwindichkeit nach hinten
und andersrum.

Tennisball

BeitragMo, Jun 21, 2010 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

BladeRunner

Moderator

BeitragMo, Jun 21, 2010 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jun 21, 2010 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jun 21, 2010 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jun 21, 2010 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jun 21, 2010 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab jetzt darauf verzichtet, also das mit ...10/speed# ...

und es klappt
warum bin ich da vorher nicht drauf gekommen. Embarassed
BlitzBasic: [AUSKLAPPEN]

If KeyHit(208) Then speed#=speed#+1
If KeyHit(200) Then speed#=speed#-1

MoveEntity objekt,0,0,speed#

mpmxyz

BeitragMo, Jun 21, 2010 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jun 21, 2010 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group