Voiture et virage

Partagez votre expérience de PureBasic avec les autres utilisateurs.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Voiture et virage

Message par comtois »

Je visite de temps en temps le forum allemand, le dimanche quand j'y pense, et je viens de tomber sur ce code, je ne l'ai pas encore analysé, mais j'aime bien ce que je vois sur l'écran, et ça peut servir à d'autres, notamment huitbit et ses petites voitures ?

Source de l'information

Code : Tout sélectionner

;http://www.purebasic.fr/german/viewtopic.php?t=14815
InitSprite()
InitSprite3D()
InitKeyboard()

OpenScreen(1024, 768, 32, "test")

CreateSprite(1, 64, 64, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(1))
  Box(0,  16, 32, 32, RGB(192,192,192))
  Box(32, 16, 32, 32, #Gray)
StopDrawing()
CreateSprite3D(1, 1)

; startposition Auto
carx.f = 200
cary.f = 200
; startwinkel Auto
cara.f = 0
; Geschwindigkeit
cars.f = 0
carsmax.f = 5
carb.f = 0.1

; radabstand
l = 32

; lenkeinschlag
alpha.f = 0*#PI/180

; gegenwinkel zu alpha
beta.f = 90*#PI/180-alpha

; winkel des Autos
angle.f = cara*#PI/180

; max Lenkausschlag
maxlenk.f = 25*#PI/180


Repeat
  FlipBuffers()
  ClearScreen(0)
  ExamineKeyboard()
 
  ; Lenkung
  If KeyboardPushed(#PB_Key_Left)
    alpha - 0.05
  ElseIf KeyboardPushed(#PB_Key_Right)
    alpha + 0.05
  EndIf
  If alpha > maxlenk
    alpha = maxlenk
  ElseIf alpha < -maxlenk
    alpha = -maxlenk
  EndIf
 
  ; beta neu berechnen: beta=90-alpha
  beta.f = 0.5*#PI-alpha
 
  ; Radius der Vorderachse
  r1.f = l/Cos(beta)
  ; Radius der Hinterachse
  r2.f = Tan(beta)*l
 
  ; Wendepunkt der Kurve bestimmen
  mx.f = carx + Sin(angle)*r2
  my.f = cary + Cos(angle)*r2
 
  If KeyboardPushed(#PB_Key_Down) ; Bremsen
    If cars > 0 : cars - carb : EndIf
    If cars < 0 : cars = 0 : EndIf
  ElseIf KeyboardPushed(#PB_Key_Up) ; Gasgeben
    cars + carb
    If cars > carsmax : cars = carsmax : EndIf
  Else ; Rollen
    cars - carb*0.1
    If cars < 0 : cars = 0 : EndIf
  EndIf
 
    ; speed (cars) auf dem Bogen vorangehen
    angle - cars/r1
    If Abs(beta-#PI/2) > 0.01
      ; neue Position des Autos bestimmen
      carx = mx - Sin(angle)*r2
      cary = my - Cos(angle)*r2
    Else
      ; neue Position des Autos bestimmen
      carx + Cos(angle)*cars
      cary - Sin(angle)*cars
    EndIf
    If alpha < 0
      alpha + 0.02
      If alpha > 0
        alpha = 0
      EndIf
    ElseIf alpha > 0
      alpha - 0.02
      If alpha < 0
        alpha = 0
      EndIf
    EndIf
 
 
  Start3D()
    ; Sprite drehen
    RotateSprite3D(1, -angle*180/#PI, 0)
    ; Sprite auf der Hinterachse zentrieren
    DisplaySprite3D(1, carx-32+Cos(angle)*16, cary-32-Sin(angle)*16)
  Stop3D()
 
  StartDrawing(ScreenOutput())
    ; Hinterachse anzeigen
    Circle(carx, cary, 3, #Red)
    ; Drehpunkt anzeigen
    Circle(mx, my, 3, #Green)
    DrawingMode(4)
    ; Auto Richtung anzeigen
    Line(carx, cary, Cos(angle)*l, -Sin(angle)*l, #Red)
    ; Radius Vorderachse
    If Cos(beta) <> 0
     Circle(mx, my, l/Cos(beta), #Red)
    EndIf
    ; Radius Hinterachse
    If Cos(beta) <> 0
     Circle(mx, my, Tan(beta)*l, #Blue)
    EndIf
    ; Lenkung anzeigen
    Line(carx+Cos(angle)*l, cary-Sin(angle)*l, Cos(angle-alpha)*10, -Sin(angle-alpha)*10, #White)
    Line(carx+Cos(angle)*l, cary-Sin(angle)*l, Cos(angle-alpha+#PI)*10, -Sin(angle-alpha+#PI)*10, #White)
   
    DrawingMode(1)
    FrontColor(#White)
    DrawText(10, 10, "Lenkeinschlag: "+Str(alpha*180/#PI)+"°", #White)
    DrawText(10, 30, "CarAngle: "+StrF(angle*180/#PI, 2)+"°", #White)
    DrawText(10, 50, "r2: "+StrF(r2,2), #White)
  StopDrawing()
 
Until KeyboardReleased(#PB_Key_Escape)

End
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

En effet ce petit code est bien sympa, cela me rappel la discution que l'on avait aussi
il y a quelques temps avec Slide pour son avion... :)
Force et sagesse...
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: Voiture et virage

Message par beauregard »

comtois a écrit :notamment huitbit et ses petites voitures ?
c'est sympa pour huitbit, moi aussi j'avais exploré les forums et quand je tombais sur un truc concernant son projet, et bien je lui en faisait part... et c'est sympa que tu prenne le relai, afin de l'encourager:
http://www.purebasic.fr/french/viewtopic.php?t=7355
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message par Huitbit »

Merci,

Je suis pas très productif ces temps-ci :oops: :cry:

En ce moment, je suis en mode veille au niveau programmation à cause du boulot mais mon cerveau en profite pour chercher de nouvelles pistes (j'ai même des idées de jeu de plateformes pour plus tard!).

Dès que je peux, je me remets à mon vroum_éditeur!

Hasta la vista!
Répondre