[GML]Demande d'aide

Démarré par zeldalyoko, 19 Septembre 2007 à 22:46

0 Membres et 1 Invité sur ce sujet

Coucou,

J'ai besoin de votre aide  :D
J'ai fais un petit script sympas pour faire afficher des coeurs de vies, seulement voilà, imposible de faire afficher les coeurs de vies les un après les autres, sa m'affiche toujours tous les coeurs les un par-dessus les autres et sa les avances à l'infinir ! ( je ne sais pas si je suis très clair )

for(d=0; d<=10; d+=1)
{

draw_text(0,0,d);
    if(vie[d]==0.5)
    {
    draw_sprite(sprite1,d,x+u,y);
    }
    if(vie[d]==1)
    {
    draw_sprite(sprite0,d,x+u,y);
    }   
u+=2;
}


Vous avez la solution ? vous n'avez rien compris ?? dites le :)
Merci en tout cas si vous prenez la peine de me repondre :)

Très bon jeu. Je le conseil a tout le monde =)

Comme ca je sais pas je te conseillerai de mettre de quoi afficher toutes tes variable en permanance et de mettre des pause de temps en temps pour voire d'ou viens le problème, aremière vue j'ai riena redire sur l'algo.
Je t' lily.

Regex / Les ravages de linux
CitationDites, dans un CV, faut mettre si on préfère vim ou emacs ?
Dis papa comment on fait les bébé
[/table

20 Septembre 2007 à 00:15 #2 Dernière édition: 20 Septembre 2007 à 00:19 par zeldalyoko
J'ai changer For par While sa semble afficher les coeurs de vies comme je le souhaite, mais sa supprime toute les sprites à la fin du while :-\

while(d<10)
{
draw_text(0,0,d);
    if(vie[d]==0.5)
    {
    draw_sprite(sprite1,d,x+u,y);
    u+=25;
    }
    else if(vie[d]==1)
    {
    draw_sprite(sprite0,d,x+u,y);
    u+=25;
    } 


Vous savez comment faire laisser afficher toute les sprites à la fin du while ?

Merci mooglwy de m'avoir repondu :)

Très bon jeu. Je le conseil a tout le monde =)

Une question, d'où vient la variable u ? ;) Si tu la définit dans Create, alors voilà pourquoi tes coeurs n'arrêtent pas de se déplacer. Car la variable va rester à la position X du dernier coeur affiché, donc le premier coeur sera affiché à la place du dernier au prochain step. Il faut donc la remettre à zéro à chaque fois que le code est éxécuté pour que les coeurs soit placés au bon endroit.

Aussi, tu incrémentes la variable u de 2 à chaque itération, donc ça veut dire que le coeur ne sera décalé que de deux pixels, alors il est normal qu'ils se chevauchent(À moins que tes coeurs mesurent deux pixels de large ? :blink:). Mais je vois que tu as corrigé ce problème avec le deuxième code.

Pour le changement de la boucle en while, je comprend pas, ça devait normalement donner une boucle infinie, non ? Car ta condition est "Tant que d est plus petit que 10", et d n'est incrémenté nulle part dans ta boucle. Donc si elle commence à zéro(elle a probablement cette valeur, dans l'évènement Create, non ?), elle va rester toujours à zéro (et donc, ça va afficher toujours le premier coeur).


Essaie ce code:

u = 0;

for(d=0; d<=10; d+=1)
{

draw_text(0,0,d);
    if(vie[d]==0.5)
    {
    draw_sprite(sprite1,d,x+u,y);
    }
    if(vie[d]==1)
    {
    draw_sprite(sprite0,d,x+u,y);
    }   
u+=25;
}

D'accord HCKev, effectivement, c'était un probléme de variable  :mrgreen:

Par contre, je trouve mon code minable  :unsure:

Create
vie[1]=1;
vie[2]=1;
vie[3]=1;
vie[4]=1;
vie[5]=1;
vie[6]=1;
vie[7]=1;
vie[8]=1;
vie[9]=1;
vie[10]=0.5;
d=1;


Draw
u = 0;

for(d=0; d<=10; d+=1)
{

draw_text(x+u,0,vie[d]);
    if(vie[d]==0.5)
    {
    draw_sprite(sprite1,d,x+u,y);
    }
    if(vie[d]==1)
    {
    draw_sprite(sprite0,d,x+u,y);
    }   
u+=25;
}


Vous en pensez quoi ? ( ce que je trouve minable c'est les variables  -> vie[6]=1; )

Très bon jeu. Je le conseil a tout le monde =)

Un truc simple serait d'avoir deux variables: vie, et vie_max.

vie correspond au nombre de coeurs actuels. Une valeur de 5 équivaut donc à 5 coeurs pleins, 4.5 correspond à 4 coeurs et demi, et ainsi de suite. vie_max représente le nombre de coeurs maximum que Link peut avoir.

Après, tu fait un truc du genre:

for ( i = 0; i < vie_max; i+=1 )
{
    if ( vie > i )
    {
        if ( i+1 - vie == 0.5 )
        {
            draw_sprite(spr_coeur,1,x+(i*25),y); // Demi coeur
        }
        // Éventuellement, on pourrait mettre ici le support des 1/4 et 3/4 de coeurs
        else
        {
            draw_sprite(spr_coeur,0,x+(i*25),y); // Coeur plein
        }
    }
    else
    {
        draw_sprite(spr_coeur,2,x+(i*25),y); // Coeur vide
    }
}


À noter que le script est basé sur un sprite nommé spr_coeur dont la première image est un coeur plein, la deuxième un demi coeur et la troisième un coeur vide.


Après, il faudrait modifier un peu le code si on souhaite faire deux rangées de coeurs comme dans Zelda, mais ça ne devrait pas être très compliqué.

Voilà, en espérant t'avoir aidé :)

22 Septembre 2007 à 19:52 #6 Dernière édition: 22 Septembre 2007 à 22:38 par zeldalyoko
Ouais, tu m'aides  :D
Merci :D

En ce moment, je tente de faire une IA xD... Sa avance :D... Je vous metterez une vidéo peut être sous peu ( avec un topic sur le projet peut être  :huh: :unsure: ) ( precision c'est pas un zelda, un type de jeu qu'on a hum... presque jamais vu sur solarus xD )

EDIT : J'ai besoin de vous :D
Puis-je faire tourner un objet autour d'un autre objet ? vous voyez ?  :rolleyes:

Très bon jeu. Je le conseil a tout le monde =)

23 Septembre 2007 à 02:45 #7 Dernière édition: 23 Septembre 2007 à 03:05 par HCkev
Ça dépend, l'objet qui est au centre, peut-il bouger ? S'il reste fixe et que c'est simplement faire tourner autour en répétition, tu peux simplement créer un nouveau path ;)

Sinon, si c'est pour faire un peu comme les vautours dans Alttp, ça demande un peu plus de programmation :)

J'avais fait un truc du genre il y a quelques années... Sur ma calculatrice graphique, j'avais fait une fonction qui trace un cercle, en tournant autour d'un point et en dessinant chaque pixel... Mais il y a longtemps de ça et je ne me souvient plus exactement comment j'ai fait ça, je sais que c'est avec la trigonométrie, mais c'est tout. Je vais faire quelques test :)


Edit: Ah ben c'est plus simple que je croyais :) Je te fourni le .gm6.

http://www.megaupload.com/?d=IQ91QEK1

Est-ce que c'est bien ça que tu veux faire ?

Ouais, aucun probléme, c'est ce que je voulais merci  beaucoup   :P
Seulement, léger probléme, je vais peut être avec 3 ou 4 IA et donc UN cercle pour chaque IA ! Comment faire pour donner une ID bien precise à nos cercles, pour qu'il puisse envoyer les infos de ce qui ce passe a l'IA avec lesquel il est appararenter....

Euh... vous avez compris ?  :blink: :unsure:

Très bon jeu. Je le conseil a tout le monde =)

Hm, en gros, tu veux enregistrer l'ID des occurrences des cercle dans un objet, pour pouvoir les manipuler à partir de cet objet ?

Je pense que ce sujet sur le forum de Game maker pourrait t'aider :)
http://gmc.yoyogames.com/index.php?showtopic=197622&hl=