Bonjour à tous !
Voici un tutorial pour faire marcher un perso !
Bah ! Tout le monde sait faire ça !
Détrompez vous, 85 % des programmateur amateur qui se lance sur GM ne savent pas, alors que c'est super simpleVoici la procedure :
Vous créez un objet que vous nommerez perso.
Ensuite, dans la zone sprite de l'objet, vous y ajouterez votre sprite.
Une fois cela fait, vérifiez que le perso est visible mais pas solide.
C'est bon ?
Alors la suite se corse un peu.
Vous cliquez sur Add Event et vois selectionnez Create dans la boite de dialogue qui s'ouvre à vous.
Et la, à droite vous selectionnerez execute a code (deplacez vous avec les onglet si vous ne trouvez pas).
Et vous y ajouterez :
- Code: Tout sélectionner
global.facing = "D"
image_speed = 0.5
moving = 0
movestep = 0
movespeed = 3 // Votre perso marche pixel par pixel
Envuite, dans le menu d'en bas vous y rajouterez Step, et vous ajouterez idem qu'au premier Execute Code :
- Code: Tout sélectionner
// Mouvement du perso
var fholdd, fholdu, fholdl, fholdr, cc;
// Verification des touches du clavier
holdd = keyboard_check(vk_down)
holdu = keyboard_check(vk_up)
holdl = keyboard_check(vk_left)
holdr = keyboard_check(vk_right)
// Annulation des touches opposée
if holdu && holdd {
holdu=0
holdd=0
}
if holdl && holdr {
holdl=0
holdr=0
}
if holdd ||holdu || holdl || holdr {
// Changement de sprite si ce n'est pas déjà fait
if !moving {
if holdd { sprite_index=sprLinkRunD; global.facing="D" }
else if holdu { sprite_index=sprLinkRunU; global.facing="U" }
if holdl { sprite_index=sprLinkRunL; global.facing="L" }
else if holdr { sprite_index=sprLinkRunR; global.facing="R" }
}
moving=1
// Correction de sprite
if (holdd && !holdl && !holdr) { sprite_index=sprLinkRunD; global.facing="D" }
else if (holdu && !holdl && !holdr) { sprite_index=sprLinkRunU; global.facing="U" }
else if (holdl && !holdd && !holdu) { sprite_index=sprLinkRunL; global.facing="L" }
else if (holdr && !holdd && !holdu) { sprite_index=sprLinkRunR; global.facing="R" }
if (holdd && holdl && sprite_index!=sprLinkRunD && sprite_index!=sprLinkRunL) { sprite_index=sprLinkRunL; global.facing="L" }
else if (holdd && holdr && sprite_index!=sprLinkRunD && sprite_index!=sprLinkRunR) { sprite_index=sprLinkRunR; global.facing="R" }
else if (holdu && holdl && sprite_index!=sprLinkRunU && sprite_index!=sprLinkRunL) { sprite_index=sprLinkRunL; global.facing="L" }
else if (holdu && holdr && sprite_index!=sprLinkRunU && sprite_index!=sprLinkRunR) { sprite_index=sprLinkRunR; global.facing="R" }
} else { moving=0 }
if moving {
// Determine le delai entre chaque pas
if (holdd || holdu) && (holdl || holdr) { movestep+=(movespeed/sqrt(2)) }
else { movestep+=movespeed }
// Début du mouvement
while movestep>=1 {
movestep-=1
fholdd=0; fholdu=0; fholdl=0; fholdr=0;
for (cc=6; cc>0; cc-=1) {
if holdu {
if !place_free(x,y-1) {
if place_free(x-cc,y-1) && !(holdr || fholdr) { fholdl=1 }
else if place_free(x+cc,y-1) && !(holdl || fholdl) { fholdr=1 }
}
} else if holdd {
if !place_free(x,y+1) {
if place_free(x-cc,y+1) && !(holdr || fholdr) { fholdl=1 }
else if place_free(x+cc,y+1) && !(holdl || fholdl) { fholdr=1 }
}
}
if holdl {
if !place_free(x-1,y) {
if place_free(x-1,y-cc) && !(holdd || fholdd) { fholdu=1 }
else if place_free(x-1,y+cc) && !(holdu || fholdu) { fholdd=1 }
}
} else if holdr {
if !place_free(x+1,y) {
if place_free(x+1,y-cc) && !(holdd || fholdd) { fholdu=1 }
else if place_free(x+1,y+cc) && !(holdu || fholdu) { fholdd=1 }
}
}
}
xstep=(holdr || fholdr)-(holdl || fholdl)
ystep=(holdd || fholdd)-(holdu || fholdu)
if place_free(x+xstep,y) { x+=xstep }
if place_free(x,y+ystep) { y+=ystep }
}
} else {
switch sprite_index {
case sprLinkRunD: sprite_index=sprLinkStandD; break;
case sprLinkRunU: sprite_index=sprLinkStandU; break;
case sprLinkRunL: sprite_index=sprLinkStandL; break;
case sprLinkRunR: sprite_index=sprLinkStandR; break;
}
movestep=0
}
depth=-y
N'oubliez pas de modifier les sprLinkRun* par le nom de vos sprites.
Ensuite, on fait l'ombre du perso dans le menu en bas vous faîte Draw et vous y rajouterez le script :
- Code: Tout sélectionner
draw_sprite(ombre,0,x,y)
draw_sprite(sprite_index,-1,x,y)
N'oubliez pas de créer l'ombre du perso et vous le nommerez ombre.
Voila c'est fini si vous avez des problèmes postez ici ou MP moi