Voila c'est un script que j'ai trouvé sur le web et que j'ai amélioré .
Comme ce qui l'ont fait n'ont pas donnés leurs nom ce script seras en partie anonyme.(encore merci a ceux qui l'ont crée).
Il permet d'effectuer exactement les mouvements de Link dans "The legend of zelda the minish cap"
-Avec la gestion des collision
-La gestion des sprites
-La gestion de la vitesse
Tout d'abord dans l'event create mettez ces 2 variables
pour que le script qui suit puisse fonctionner :
moving = 0 //l'objet est à l'arrêt
movespeed = 3 //la vitesse de déplacement
Maintenant voici le script : MovementBase
var fholdd, fholdu, fholdl, fholdr, cc;
holdd=keyboard_check(vk_down)
holdu=keyboard_check(vk_up)
holdl=keyboard_check(vk_left)
holdr=keyboard_check(vk_right)
if holdu && holdd {
holdu=0
holdd=0 }
if holdl && holdr {
holdl=0
holdr=0 }
if (holdd ||holdu || holdl || holdr)
{
if (!moving) {
if (holdd) { sprite_index=argument4; global.facing="D" }
else if (holdu) { sprite_index=argument5; global.facing="U" }
if (holdl) { sprite_index=argument6; global.facing="L" }
else if (holdr) { sprite_index=argument7; global.facing="R" }}
moving = 1
if (holdd && !holdl && !holdr) { sprite_index=argument4; global.facing="D" }
else if (holdu && !holdl && !holdr) { sprite_index=argument5; global.facing="U" }
else if (holdl && !holdd && !holdu) { sprite_index=argument6; global.facing="L" }
else if (holdr && !holdd && !holdu) { sprite_index=argument7; global.facing="R" }
if (holdd && holdl && sprite_index!=argument4 && sprite_index!=argument6) { sprite_index=argument6; global.facing="L" }
else if (holdd && holdr && sprite_index!=argument4 && sprite_index!=argument7) { sprite_index=argument7; global.facing="R" }
else if (holdu && holdl && sprite_index!=argument5 && sprite_index!=argument6) { sprite_index=argument6; global.facing="L" }
else if (holdu && holdr && sprite_index!=argument5 && sprite_index!=argument7) { sprite_index=argument7; global.facing="R" }
} else { moving=0 }
if (moving) {
if ((holdd || holdu) && (holdl || holdr)) { movestep+=(movespeed/sqrt(2)) }
else { movestep+=movespeed }
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 argument4: sprite_index=argument0; break;
case argument5: sprite_index=argument1; break;
case argument6: sprite_index=argument2; break;
case argument7: sprite_index=argument3; break;}
movestep=0 }
//le script se termine ici
//
//
////////////////////////////////////////////////
///////////////////////////////////////////////
Il seras à mettre dans l'event step comme ça : c'est un exemple
MovementBase(spr_bas_stp_lch,spr_hau_stp_lch,spr_gch_stp_lch,spr_drt_stp_lch, spr_bas_mvt_lch,spr_hau_mvt_lch,spr_gch_mvt_lch,spr_drt_mvt_lch)
/*
argument0 : sprite bas stop
argument1 : sprite haut stop
argument2 : sprite gauche stop
argument3 : sprite droite stop
argument4 : sprite bas mvt
argument5 : sprite haut mvt
argument6 : sprite gauche mvt
argument7 : sprite droite mvt
//////////////////////////////////////
////////////////////////////////////////
voila c'est terminé
conseillé a toute personne qui se lance dans un projet de type zelda