Page 1 sur 1

Jeu en 2D

Publié : mar. 28/juin/2011 13:35
par pat
Bonjour,

Je suis intéressé pour faire un jeux en 2D avec un décor et une route auquel une voiture serait dessus et il faudrait gérer le scrolling des images et gérer la collision de la voiture avec les bords de la route.
J'avoue avoir besoin d'aide car je ne sais pas comment aborder le sujet (point de vue programmation).
Merci pour ceux qui voudront bien m'aider.

Re: Jeu en 2D

Publié : mar. 28/juin/2011 14:19
par G-Rom
Quel type de route ? à la old school ? style pole positionsur atari ?
Image

Re: Jeu en 2D

Publié : mar. 28/juin/2011 19:36
par Thyphoon
style supercar2 sur Amiga ?
Image

Re: Jeu en 2D

Publié : mer. 29/juin/2011 11:59
par pat
Merci pour vos réponses.
L'un ou l'autre et pourquoi pas les deux.
Mais je ne sais pas comment faire.

Re: Jeu en 2D

Publié : mer. 29/juin/2011 12:44
par Thyphoon
il y a une infinité de façon de faire ça ... tout dépend de la taille du circuit si tu veux pouvoir passer dessus ou/en dessous le décor etc...
Si le circuit est fermé (genre course de F1) ou ouvert (promenade en ville)
après il faut faire appel ton imagination et a quelques connaissance mathématique !
Si ça peut t'aider voici un code de BalrogSoft du forum anglais qui te permet d'avoir un comportement de voiture réaliste !

Code : Tout sélectionner

;BalrogSoft

InitSprite()
InitSprite3D()
InitKeyboard()

Procedure.f min(a.f, d.f)
  If a < d
    ProcedureReturn a
  Else
    ProcedureReturn d
  EndIf
EndProcedure

Procedure.f max(a.f, d.f)
  If a > d
    ProcedureReturn a
  Else
    ProcedureReturn d
  EndIf
EndProcedure

Procedure.f _Sign(a.f)
  If a.f < 0
    ProcedureReturn -1.0
  Else
    ProcedureReturn 1.0
  EndIf
EndProcedure


Procedure.f adjust(v.f,threshold.f,maximum.f)
      vx.f = 0
      If (v <= threshold)
        vx=(v/threshold)*1.0
      Else
        vx = 1
      EndIf
      ProcedureReturn vx
EndProcedure
   
Quit.b = #False

accel.f = 0.2 ; acceleration due To gas (up arrow)
steer.f = 0.08 ; steering tightness
steer_normal.f = 0.08 ; Default Steering
steer_handbrake.f = 0.099 ; Incremental increases For handbrakeys
steer_threshold.f = 4 ; Speed where steering at its most manouvreable
MINspd.f = -5 ; max reverse speed
MAXspd.f = 22   ; max speed on straightaway
MAXskiddisplay.f = 2 ; Display skids on slides till this value reached
MAXturnSpd.f = 10 ; maximum speed While turning
MaxTurnSkid.f = 18 ; Maximum speed in turn before skidding
deccel.f = 0.92 ; decelleration due To brakes (down arrow)
handbrake.f = 0.93 ; decelleration due To brakes (down arrow)
handbrake_traction.f = 20 ; Amount of slide For handbrake higher is more
drift.f = 0.98 ; deceleration after letting off gas

speed.f = 0  ; duuuh!
surface.f = 3 ; Tar = 10 gravel = 1 ice = 0.5
traction.f = 5 ; the higher the more slippery init value
traction_max.f = 1 ; Max Traction
Dim vector.f(1) ; vector of the direction of the car
bounceBack.f = 0.6 ; percent of speed when bounced back from hitting an obstacle

angle.f

collide = false ; Used To make sure car doesnt get stuck in collision checks
   
   
If OpenWindow(0, 0, 0, 640, 480, "Car Physics", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)
 
  ;LoadSprite(0, "car.bmp", #PB_Sprite_Texture)
  CreateSprite(0,64,64,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(0))
    Box(16,0,32,64,#Red)
  StopDrawing()
  CreateSprite3D(0, 0)
 
  Repeat
   
    WEvent = WindowEvent()
   
    If WEvent = #PB_Event_CloseWindow
      Quit = #True   
    EndIf
   
    rotation = angle * 180 / #PI
   
    ExamineKeyboard()
    UP = KeyboardPushed(#PB_Key_Up) >> 7
    DOWN = KeyboardPushed(#PB_Key_Down) >> 7   
    HAND = KeyboardPushed(#PB_Key_LeftControl) >> 7
    LEFT = KeyboardPushed(#PB_Key_Left) >> 7
    RIGHT = KeyboardPushed(#PB_Key_Right) >> 7
   
    UD = UP - DOWN
    LR =  RIGHT - LEFT
   
    If LR
      angle + (LR*steer*adjust(Abs(speed),steer_threshold, MAXSpd))
    EndIf
   
   
    If UD = #False
        speed * drift
    ElseIf UD <> #False And HAND = #False
        speed = Min(Max(speed+UD*accel,MINspd),MAXspd)
    EndIf
   
    If (Abs(speed) < accel/2)
      speed = 0
    EndIf
 
    If HAND
       speed  * handbrake
   If (speed > MAXskiddisplay)
       steer = steer_handbrake
   EndIf
   traction = handbrake_traction/surface
    Else
   traction = Max(traction_max, Abs((speed-MAXturnSpd)/surface))
        steer = steer_normal
    EndIf

    If (speed < 0 )
      traction = 1.0
    EndIf
   
    xv.f = ((Cos(angle) * speed) - vector(0))/traction
    yv.f = ((Sin(angle) * speed) - vector(1))/traction
     
    vector(0) + xv.f
    vector(1) + yv.f
   
    track_x.f + vector(0)
    track_y.f + vector(1)


    StartDrawing(ScreenOutput())
    DrawText(0, 0, "Car x: " + StrF(x))
    DrawText(0, 20, "Car y: " + StrF(y))
    DrawText(0, 60, "speed: "+ StrF(speed))
    DrawText(0, 80, "angle: " + StrF(rotation))
    StopDrawing()
   
    Start3D()
    RotateSprite3D(0, rotation + 275, 0)
    DisplaySprite3D(0, track_x, track_y, 255)
    Stop3D()
   
    FlipBuffers()
    ClearScreen(0)
    Delay(30)
   
  Until Quit = #True
 
  CloseWindow(0)
EndIf

Re: Jeu en 2D

Publié : mar. 05/juil./2011 13:25
par pat
Merci Thyphoon.
Je vais voir de plus près ton code.

Re: Jeu en 2D

Publié : mar. 05/juil./2011 14:50
par Ar-S
supercar2
oh yeah Image

Re: Jeu en 2D

Publié : mar. 05/juil./2011 19:25
par Thyphoon
pat a écrit :Merci Thyphoon.
Je vais voir de plus près ton code.
il est pas de moi, mais ça devrait t'aider ! ;)
Ar-S a écrit :
supercar2
oh yeah Image
un connaisseur je vois !! :mrgreen:

Re: Jeu en 2D

Publié : mar. 05/juil./2011 20:06
par Ar-S
Oui :) et dans le même genre, l'excellent Nitro !