Question sur les Boucles. Hitskin_logo Hitskin.com

Ceci est une prévisualisation d'un thème de Hitskin.com
Installer le thèmeRetourner sur la fiche du thème



AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  
Le Deal du moment :
LEGODAYS : 20% sur une sélection de LEGO avec ...
Voir le deal

 

 Question sur les Boucles.

Aller en bas 
2 participants
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

Question sur les Boucles. Empty
MessageSujet: Question sur les Boucles.   Question sur les Boucles. EmptyVen 14 Oct 2011 - 17:39

Bonjour, alors je vais poser une question qui me perturbe beaucoup.

En fait je vois dans quasiment tout les codes de déplacements des boucles "repeat".

Exemple au hasard pris parmi tant d'autres (code de onilink_):
Code:
repeat( abs(horizontalSpeed) )
{
    if( place_free(x + sign(horizontalSpeed), y) )
    {
        x += sign(horizontalSpeed)
    }
    else
    horizontalSpeed = 0
}

Et c'est là que je ne pige pas pourquoi un "repeat" et non pas un "wile"?
Car en fesant des testes:
Code:
var i,ii;
i=6;
ii=0;

repeat(i){
    ii+=1;
    i+=1;
   
show_message(string(ii)+" | "+string(i)); 
}

game_end();

Je me suis rendu compte que la variable utilisé dans la condition de bouclage d'un "repeat" ne se met pas a jour à chaque fin de tour.
Donc si on reprend le premier code, si on utilise un "while" au lieu d'un "repeat" on est gagnant non?
Vus que la boucle s’arrête si on rencontre un obstacle solide alors qu'avec un "repeat" la boucle continuas quand même.

Donc ma question est pourquoi tout le monde utilise un "repeat" au lieu d'un "while"? Il y a quelque chose que je n'ai pas vus?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

Question sur les Boucles. Empty
MessageSujet: Re: Question sur les Boucles.   Question sur les Boucles. EmptyVen 14 Oct 2011 - 20:28

Tout simplement car horizontalSpeed ne change pas dans mon code, sauf pour la remise a 0.
Mais c'est vrai qu'il aurais été un peu mieux de mettre :
Code:
repeat( abs(horizontalSpeed) )
{
    if( place_free(x + sign(horizontalSpeed), y) )
    {
        x += sign(horizontalSpeed)
    }
    else
    {
      horizontalSpeed = 0
      break
    }
}

Fin bon on gagne pas non plus grand chose :p
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

Question sur les Boucles. Empty
MessageSujet: Re: Question sur les Boucles.   Question sur les Boucles. EmptyVen 14 Oct 2011 - 23:13

Bonsoir onilink_,

merci pour ta réponse, donc effectivement je ne me suis pas trompé.

Citation :
Fin bon on gagne pas non plus grand chose :p
Je te l'accorde mais je suis en mode apprentissage donc j'essai de faire de tout le mieux que je peut c'est pour ça que je me pose des petites questions sans trop d'importances comme celle-ci.

Par rapport à ta réponse j'ai poussé mes tests un peut plus loin.
Voici le test que j'ai effectué:
Code:
start_time = current_time
i=1000000;
repeat(10000000){
    i-=1;
    if (i==3)break
   
}
show_message(string(current_time-start_time)+"ms" )



start_time = current_time
i=1000000;
while(i!=3){
    i-=1;
}
show_message(string(current_time-start_time)+"ms" )

game_end();

Sur le wile je gagne une moyenne de 40/45ms. (ce n'est pas grand chose mais comme je le dit c'est histoire de savoir/connaitre le GML).

Donc en conclusion on est gagnant en utilisant un wile au lieu d'un repeat.

NB: je ne fait pas ça pour te contredire loin de là je suis vraiment sur une phase d’apprentissage.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

Question sur les Boucles. Empty
MessageSujet: Re: Question sur les Boucles.   Question sur les Boucles. EmptySam 15 Oct 2011 - 10:43

Non mais je suis absolument d'accord, le while est plus rapide.
C'est juste que quand on veux optimiser on le fait lorsqu'une action est beaucoup répété, et donc inutile dans mon cas.

Quoi qu'il en soit c'est une très bonne initiative que tu prend.

D’ailleurs je peut te donner un 'tips' sur la boucle for que très peu de personnes connaissent.
On peut écrire des trucs du genre
for( {a=0 script() [...]}; a<5; {a+=1 if(a==2) a=3})
{}

Marrant hein ? :p
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

Question sur les Boucles. Empty
MessageSujet: Re: Question sur les Boucles.   Question sur les Boucles. EmptySam 15 Oct 2011 - 11:36

Bonjour onilink_,

pour les accolades je l'avais vus dans un de tes codes je ne sais plus où (j'ai lus pas mal d'anciens topic bien enterré au fin fond du forum) et c'est vrais que c'est excellent.
Par contre le script dans un for là je ne savais pas du tout et c'est vraiment énorme comme possibilité, merci pour la découverte Smile
Revenir en haut Aller en bas
Contenu sponsorisé





Question sur les Boucles. Empty
MessageSujet: Re: Question sur les Boucles.   Question sur les Boucles. Empty

Revenir en haut Aller en bas
 
Question sur les Boucles.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Question sur les Boucles
» 2 Question
» question
» optimisation des conditions, boucles, opérateurs ternaires?
» Question view + question room

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