Beschleunigung & Abbremsen

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

noobyblaster

Betreff: Beschleunigung & Abbremsen

BeitragSo, Aug 30, 2009 10:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin Moin alle zusammen Smile

Ich hab jetzt mal ein bischen an einem kleinen Rennspiel gebastelt.
nun frag ich mich wie ich die Beschleunigung und das abbremsen hinbekomme.
SuFu hab ich schon benutzt aber ich habs einfach nicht auf meinen code übertragen können. Sad

Code: [AUSKLAPPEN]
;Include "logo.bb"

ClearWorld

Global timer=CreateTimer(60)

SetBuffer BackBuffer()

player=LoadMesh("Meshes\Indycar3.3ds")
PositionEntity player,400,60,300
EntityType player,2
RotateMesh player,180,0,180

camera=CreateCamera(player)
PositionEntity camera,0,4,-10



l5=CreateLight(2)
PositionEntity l5,250,230,300
RotateEntity l5,90,0,0
EntityParent l5,m


st=LoadTexture("Texturen\wolken.jpg")
ScaleTexture st,0.1,0.1

skybox=CreateSphere ()
FlipMesh skybox
EntityType skybox,1
EntityTexture skybox,st
ScaleEntity skybox ,500,550,500
EntityOrder skybox,1
PositionEntity skybox,200,0,200
EntityFX skybox,1
      

u=CreatePlane()
PositionEntity u,0,0,0
EntityAlpha u,0.0
EntityType u,1

terrain=LoadMesh("Meshes\Rennstrecke.b3d")
PositionMesh terrain,250,40,300
EntityType terrain,1
EntityFX terrain,1


Collisions 2,1,2,3



While Not KeyDown(1)


If KeyDown( 205 )=True Then TurnEntity player,0,-1,0
If KeyDown( 203 )=True Then TurnEntity player,0,1,0
If KeyDown( 208 )=True Then MoveEntity player,0,0,-0.1
If KeyDown( 200 )=True Then MoveEntity player,0,0,0.9




RotateMesh skybox,0,-0.02,0

TranslateEntity player,0,-0.3,0



RenderWorld

UpdateWorld

Flip

Wend

End


kann mir das mal einer reinbasteln ich bekomms nicht hinn Sad
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

ToeB

BeitragSo, Aug 30, 2009 10:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du brauchst ist eine speed variable. DIe zählst du immerhoch wenn du beschleunigst und ziehst immer etwas von ihr ab wenn du bremst. Dann brauchst du nur noch MoveEntity auto,0,0,speed# zu schreiben und das wars Wink


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

noobyblaster

BeitragSo, Aug 30, 2009 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das hab ich auch schon versucht
aber dann ist das auto garnicht gefahren Crying or Very sad
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Nicdel

BeitragSo, Aug 30, 2009 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie genau hast du es versucht?
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

noobyblaster

BeitragSo, Aug 30, 2009 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
mh irgendwie hab ich da was übersehen jetzt gehts,
aber das mit dem abbremsen raff ich nicht Confused
Und Maximal geschwindigkeit wie mach ich das?
also das z.b. bei speed#=0.1 schluss ist .

Code: [AUSKLAPPEN]
Include "logo.bb"

ClearWorld

Global timer=CreateTimer(60)

SetBuffer BackBuffer()

player=LoadMesh("Meshes\Indycar3.3ds")
PositionEntity player,400,60,300
EntityType player,2
RotateMesh player,180,0,180

camera=CreateCamera(player)
PositionEntity camera,0,4,-10



l5=CreateLight(2)
PositionEntity l5,250,230,300
RotateEntity l5,90,0,0
EntityParent l5,m


st=LoadTexture("Texturen\wolken.jpg")
ScaleTexture st,0.1,0.1

skybox=CreateSphere ()
FlipMesh skybox
EntityType skybox,1
EntityTexture skybox,st
ScaleEntity skybox ,500,550,500
EntityOrder skybox,1
PositionEntity skybox,200,0,200
EntityFX skybox,1
      

u=CreatePlane()
PositionEntity u,0,0,0
EntityAlpha u,0.0
EntityType u,1

terrain=LoadMesh("Meshes\Rennstrecke.b3d")
PositionMesh terrain,250,40,300
EntityType terrain,1
EntityFX terrain,1


Collisions 2,1,2,3



While Not KeyDown(1)

If Not KeyDown( 200 )=True Then speed#=0.2

If KeyDown( 200 )=True Then 
speed#=speed#+0.01
MoveEntity player,0,0,speed#
EndIf

If KeyDown( 205 )=True Then TurnEntity player,0,-1,0
If KeyDown( 203 )=True Then TurnEntity player,0,1,0
If KeyDown( 208 )=True Then MoveEntity player,0,0,-0.1



 

RotateMesh skybox,0,-0.02,0

TranslateEntity player,0,-0.3,0



RenderWorld

UpdateWorld

Text 10,10, speed#

Flip

Wend

End 
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

ComNik

BeitragSo, Aug 30, 2009 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Übersehen das es nu geht Bitte löschen
WIP: Vorx.Engine
  • Zuletzt bearbeitet von ComNik am So, Aug 30, 2009 12:12, insgesamt einmal bearbeitet

Nicdel

BeitragSo, Aug 30, 2009 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hier:

Code: [AUSKLAPPEN]
If KeyDown( 200 )=True Then
speed#=speed#+0.01
MoveEntity player,0,0,speed#
EndIf


sollte eher so sein:

Code: [AUSKLAPPEN]
If KeyDown( 200 )=True Then
speed#=speed#+0.01
EndIf
If Keydown(208)
speed# = speed - 0.01
Endif

MoveEntity player,0,0,speed#


So geht dann auch das lansamer werden. Und für die maximal-Geschwindigkeit:

Code: [AUSKLAPPEN]

If speed# > 0.1 speed = 0.1
If speed < 0 speed = 0
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

noobyblaster

BeitragSo, Aug 30, 2009 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ja is ja klar so soll es ja auch sein
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Nicdel

BeitragSo, Aug 30, 2009 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wäre aber nicht sehr realistisch...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

noobyblaster

BeitragSo, Aug 30, 2009 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
mh aber das auto soll ja dann von allein immer langsamer werden bis es wieder steht wenn ich taste 200 nicht drücke
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Nicdel

BeitragSo, Aug 30, 2009 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann machst du in der Hauptschleife eben noch so was wie:

Code: [AUSKLAPPEN]

speed# = speed - 0.002
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Fredko

BeitragSo, Aug 30, 2009 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls es alleine langsamer werden soll, müsste man sich mit Reibung etc.
befassen, einfach geht es auch mit
Code: [AUSKLAPPEN]

speed=speed*0.8 ;Abbremsen oder
speed=speed*1.2 ;Beschleunigen


Dann sollte man aber auch um 0 herum, also z.B. -0.05 / 0.05 das Ergebnis
auf 0 bringen, da es sonst zu großen Float Ungenauigkeiten führen könnte.
!

noobyblaster

BeitragSo, Aug 30, 2009 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich meine das so:
das auto soll langsamer werden wenn ich die taste 200 los lasse.
wenn ich sie wieder drücke soll es wieder schneller werden
im moment fährt das auto dann max. geschwindegkeit weiter auch wenn ich die taste 200 los lasse.
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Nicdel

BeitragSo, Aug 30, 2009 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
So vielleicht?

Code: [AUSKLAPPEN]
If Keydown(200)
   If speed# < 0.1 speed = speed + 0.01
Else
   If speed# > 0 speed = speed - 0.01
Endif
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

noobyblaster

BeitragSo, Aug 30, 2009 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Das is genau das was ich meine =)
aber warum fährt das auto dann immer -0.00999933 wenn ich keine taste drücke ?
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Nicdel

BeitragSo, Aug 30, 2009 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke mal das sind Floatungenauigkeiten...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

mpmxyz

BeitragSo, Aug 30, 2009 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt vielleicht daran, dass die Floats nicht so extrem genau sind und es Ungenauigkeiten bei der Umrechnung von den Zahlen, wie 0.01, in Floatwerte gibt.
So sollte es aber funktionieren:
BlitzBasic: [AUSKLAPPEN]
If speed# > 0 Then speed = speed - 0.01 Else speed = 0 


mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

noobyblaster

BeitragSo, Aug 30, 2009 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
das geht jetzt auch aber dafür kann ich jetzt nicht mehr nach hinten fahren Confused
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

mpmxyz

BeitragSo, Aug 30, 2009 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann mache es in etwa so:
BlitzBasic: [AUSKLAPPEN]
If KeyDown(...)
;Vorwärts beschleunigen
ElseIf KeyDown(...)
;Rückwärts beschleunigen
Else
If Speed>0 Then Speed=Speed-0.01
If Speed<0 Then Speed=Speed+0.01
If Speed<0.01 And Speed>0 Then Speed=0
EndIf


mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

noobyblaster

BeitragSo, Aug 30, 2009 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
mh funz nicht
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group