Salut à tous, j'aurai besoin d'un coup de main pour mon moteur 2D.
Je développe le système de collision et j'essaye de lui intégrer un moteur physique (rudimentaire!)
Voici le bout de code qui gère la transmission de vitesse (je sais pas si on peut appeler ça comme ça)
► Afficher le texte
Code : Tout sélectionner
Local $dist = _GEng_SpriteToSprite_Dist($hSprite1, $hSprite2) ; distance entre les point d'origine des sprites
Local $nx, $ny, $gx, $gy
$nx = ($hSprite2[$_gSpr_PosX] - $hSprite1[$_gSpr_PosX]) / $dist
$ny = ($hSprite2[$_gSpr_PosY] - $hSprite1[$_gSpr_PosY]) / $dist
$gx = -1 * $ny
$gy = $nx
; ---
Local $v1n, $v1g, $v2n, $v2g
$v1n = $nx * $hSprite1[$_gSpr_SpeedX] + $ny * $hSprite1[$_gSpr_SpeedY]
$v1g = $gx * $hSprite1[$_gSpr_SpeedX] + $gy * $hSprite1[$_gSpr_SpeedY]
$v2n = $nx * $hSprite2[$_gSpr_SpeedX] + $ny * $hSprite2[$_gSpr_SpeedY]
$v2g = $gx * $hSprite2[$_gSpr_SpeedX] + $gy * $hSprite2[$_gSpr_SpeedY]
; ---
If $hSprite1[$_gSpr_Masse] > 0 Then
$hSprite1[$_gSpr_SpeedX] = $nx * $v2n + $gx * $v1g
$hSprite1[$_gSpr_SpeedY] = $ny * $v2n + $gy * $v1g
EndIf
If $hSprite2[$_gSpr_Masse] > 0 Then
$hSprite2[$_gSpr_SpeedX] = $nx * $v1n + $gx * $v2g
$hSprite2[$_gSpr_SpeedY] = $ny * $v1n + $gy * $v2g
EndIf
Je me suis inspirer de ça:
http://fr.wikipedia.org/wiki/Choc_%C3%A9lastique
Alors ça marche bien! mais la masse des objets sprites n'est pas prise en compte, et je n'ai aucune idée ou insérer la variable masse ($hSpriteX[$_gSpr_Masse]) dans les équations!
Aussi, j'aimerai que si la masse d'un objet est à 0, sa vitesse ne change pas, qu'il ne soit pas pris en compte.
J'ai essayé de le faire (comme vous voyez!) dans le code, mais si la masse d'un objet est à 0, alors le comportement est bizarre: l'objet avec une masse s'arrête tout simplement de bouger, on dirait qu'il se colle à l'objet de masse 0.
Si c'est trop compliqué de gérer un objet de masse 0 (car c'est pas super réaliste je sais!), je peut toujours donner à un objet qui ne doit pas broncher d'une collision un masse énorme, genre 10000000000000!
Merci