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 ?

Re: Jeu en 2D
Publié : mar. 28/juin/2011 19:36
par Thyphoon
style supercar2 sur Amiga ?

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

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

un connaisseur je vois !!

Re: Jeu en 2D
Publié : mar. 05/juil./2011 20:06
par Ar-S
Oui

et dans le même genre, l'excellent
Nitro !