onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: updateFromVelocity - Déplacements pour 2D platformer Mer 12 Fév 2014 - 16:50 | |
| Voici un script qui permet de gérer les collisions au pixel près en fonction d'une vélocité horizontale et verticale. Gère aussi les vélocités non entières (dernière partie du code), et permet de savoir s'il y a eu collision ainsi que de quel coté. - Code:
-
/* updateFromVelocity() Par onilink_ http://cbna.forumactif.com/ Déplacements au pixel près en fonction d'une velocité (vx, vy) Si une/des collision(s) detectee(s), la/les renvoie(s) dans: collisionRight collisionLeft collisionTop collisionBottom */ var xvelocity, yvelocity;
collisionRight = false collisionLeft = false
if(vx > 0) xvelocity = floor(vx) else xvelocity = ceil(vx)
if(vy > 0) yvelocity = floor(vy) else yvelocity = ceil(vy)
if(xvelocity > 0) { for(i=0; i<xvelocity; i+=1) { if(place_free(x+1, y)) x+=1 else { xvelocity = 0 collisionRight = true break } } } else if(xvelocity < 0) { for(i=0; i<-xvelocity; i+=1) { if(place_free(x-1, y)) x-=1 else { xvelocity = 0 collisionLeft = true break } } }
collisionTop = false collisionBottom = false
if(yvelocity > 0) { for(i=0; i<yvelocity; i+=1) { if(place_free(x, y+1)) y+=1 else { yvelocity = 0 collisionBottom = true break } } } else if(yvelocity < 0) { for(i=0; i<-yvelocity; i+=1) { if(place_free(x, y-1)) y-=1 else { yvelocity = 0 collisionTop = true break } } }
if(place_free(x+frac(vx), y)) { x += frac(vx) } if(place_free(x, y+frac(vy))) { y += frac(vy) }
Pour l'utiliser, le plus efficace et de créer un objet qui sera le parent de tous les objets 'physiques'. Genre Dynamic: #create - Code:
-
vx = 0 vy = 0 #end step - Code:
-
updateFromVelocity() Vous pouvez maintenant utiliser vx et vy de la même manière que hspeed et vspeed, sauf que dans ce cas les collisions seront automatiques avec les objets solides. Pour les jeux un peu complexes il est conseillé de remplacer le code précédent par: - Code:
-
/* Par onilink_ http://cbna.forumactif.com/ Deplacements au pixel près en fonction d'une velocité (vx, vy) Si une/des collision(s) detectee(s), la/les renvoie(s) dans: collisionRight collisionLeft collisionTop collisionBottom */ var xvelocity, yvelocity;
collisionRight = false collisionLeft = false
xvelocity = floor(vx) yvelocity = floor(vy)
if(xvelocity > 0) { for(i=0; i<xvelocity; i+=1) { if(placeFree(x+1, y)) x+=1 else { xvelocity = 0 collisionRight = true break } } } else if(xvelocity < 0) { for(i=0; i<-xvelocity; i+=1) { if(placeFree(x-1, y)) x-=1 else { xvelocity = 0 collisionLeft = true break } } }
collisionTop = false collisionBottom = false
if(yvelocity > 0) { for(i=0; i<yvelocity; i+=1) { if(placeFree(x, y+1)) y+=1 else { yvelocity = 0 collisionBottom = true break } } } else if(yvelocity < 0) { for(i=0; i<-yvelocity; i+=1) { if(placeFree(x, y-1)) y-=1 else { yvelocity = 0 collisionTop = true break } } }
if(placeFree(x+frac(vx), y)) { x += frac(vx) } if(placeFree(x, y+frac(vy))) { y += frac(vy) }
et de définir une fonction placeFree. Si vous n'arrivez pas a utiliser ce script, n'hésitez pas a demander un exemple. Je vous le ferais dans la soirée.
Dernière édition par onilink_ le Mer 9 Juil 2014 - 18:57, édité 1 fois (Raison : Correction floor) |
|
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: updateFromVelocity - Déplacements pour 2D platformer Dim 3 Jan 2016 - 15:22 | |
| |
|
[TheDarkTiger] Modérateur
Messages : 7420 Localisation : Essonne
| Sujet: Re: updateFromVelocity - Déplacements pour 2D platformer Jeu 14 Jan 2016 - 0:25 | |
| Mon dieu, Onilink se remet au GML !
Par curiosité, qu'est-ce qu'un verlet ? _________________ Bonne chance pour vos projets actuels ! Prêt à aider ceux qui en ont besoin ^^ l'antiqueBienvenue au 2630eme utilisateur : Mike Kennedy ! |
|
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: updateFromVelocity - Déplacements pour 2D platformer Jeu 14 Jan 2016 - 10:33 | |
| C'est juste une intégration très simple a utiliser :p
Sinon ces exemples sont assez vieux, j'ai juste fait quelques modifs x) |
|
Contenu sponsorisé
| Sujet: Re: updateFromVelocity - Déplacements pour 2D platformer | |
| |
|