AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Funko POP! Jumbo One Piece Kaido Dragon Form : ...
Voir le deal

 

 Depplacement type zelda (gestion des collision incluse)

Aller en bas 
5 participants
AuteurMessage
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) EmptySam 30 Aoû 2008 - 22:23

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
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
arthuro


Messages : 1483
Localisation : Paris
Projet Actuel : Diagon https://arthursonzogni.com/Diagon

Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Re: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) EmptySam 30 Aoû 2008 - 22:43

cool,
je te conseille de faire un gm6 d'exemple pour qu'on puisse le tester ou au moins mettre les code entre balise
Code:
[code][/code]

_________________
Depplacement type zelda (gestion des collision incluse) PochetteDepplacement type zelda (gestion des collision incluse) Signature.php?gid=588
D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
ocin53
Utilisateur moyen
ocin53


Messages : 61

Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Re: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) EmptyMar 10 Oct 2017 - 21:51

Salut oni.

J'ai remarqué que quand on "longe" un mur en diagonale, le sprite avance en vitesse réduite, alors qu'il devrait aller à la vitesse "ligne droite"
Mais je vois pas comment corriger ça...
Ca implique de détecter quand on fait le "poisson rouge"...
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Re: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) EmptyMar 10 Oct 2017 - 22:08

Houla ça date, j'ai malheureusement pas trop le temps de regarder, mais si tu joues sur movespeed après avoir detecté une collision j'imagine qu'y a moyen de remedier au probleme.

_________________
Depplacement type zelda (gestion des collision incluse) Runningpotato1Depplacement type zelda (gestion des collision incluse) TvF6GED Depplacement type zelda (gestion des collision incluse) MdetltS
Revenir en haut Aller en bas
ocin53
Utilisateur moyen
ocin53


Messages : 61

Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Re: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) EmptyMer 11 Oct 2017 - 22:02

Ok je comprends. En fait, c'est ton code que j'ai eu du mal à déchiffrer.
La première partie c'est bon.
La partie collision, ok pour le principe (boucle pour déterminer le nombre de pixels à parcourir avant le mur)
Mais j'arrive pas à piger ce que sont les fholdu/d/l/r... le f c'est pour quoi ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Re: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) EmptyMer 11 Oct 2017 - 22:07

Les holdx c'est pour savoir si une touche directionnelle a été pressée (l:left, r:right, u:up, d:down).
Et donc les fholdx c'est pareil, mais avec une information de collision en plus (f: free).

_________________
Depplacement type zelda (gestion des collision incluse) Runningpotato1Depplacement type zelda (gestion des collision incluse) TvF6GED Depplacement type zelda (gestion des collision incluse) MdetltS
Revenir en haut Aller en bas
Craki
Utilisateur confirmé: Rang ****
Craki


Messages : 1496
Localisation : Dans l’univers de métamatière

Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Re: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) EmptyJeu 21 Déc 2017 - 23:17

Rooh ****** oni le boulet qui connait pas les balises [code] ! Oups!

_________________
Depplacement type zelda (gestion des collision incluse) 357g46o
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****
hyper


Messages : 1458
Localisation : près de Nantes
Projet Actuel : Super Note Aventure

Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Re: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) EmptyMar 26 Déc 2017 - 22:47

Je crois qu'en dix ans il a eu le temps d'en avoir entendu parler Razz

_________________
côt.
Revenir en haut Aller en bas
https://cagibi.itch.io/
Contenu sponsorisé





Depplacement type zelda (gestion des collision incluse) Empty
MessageSujet: Re: Depplacement type zelda (gestion des collision incluse)   Depplacement type zelda (gestion des collision incluse) Empty

Revenir en haut Aller en bas
 
Depplacement type zelda (gestion des collision incluse)
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» changement écran type zelda.
» gestion de collision pour les munitions [RESOLU par M@d_Doc]
» Projet Proxima, Tower Defense/Gestion/Micro-gestion.
» [QST] Possible de crée ce type de jeu?
» Jeu type age of empires

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Scripts GML-
Sauter vers: