Forum Solarus-Games francophone

Jeux amateurs => La création de jeux en général => Discussion démarrée par: zeldalyoko le 19 Septembre 2007 à 22:46

Titre: [GML]Demande d'aide
Posté par: zeldalyoko le 19 Septembre 2007 à 22:46
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 :)
Titre: Re : [GML]Demande d'aide
Posté par: mooglwy le 19 Septembre 2007 à 23:52
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.
Titre: Re : [GML]Demande d'aide
Posté par: zeldalyoko le 20 Septembre 2007 à 00:15
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 :)
Titre: Re : [GML]Demande d'aide
Posté par: HCkev le 21 Septembre 2007 à 03:13
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;
}
Titre: Re : [GML]Demande d'aide
Posté par: zeldalyoko le 21 Septembre 2007 à 15:42
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; )
Titre: Re : [GML]Demande d'aide
Posté par: HCkev le 22 Septembre 2007 à 18:17
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é :)
Titre: Re : [GML]Demande d'aide
Posté par: zeldalyoko le 22 Septembre 2007 à 19:52
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:
Titre: Re : [GML]Demande d'aide
Posté par: HCkev le 23 Septembre 2007 à 02:45
Ç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 ?
Titre: Re : [GML]Demande d'aide
Posté par: zeldalyoko le 23 Septembre 2007 à 05:36
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:
Titre: Re : [GML]Demande d'aide
Posté par: HCkev le 23 Septembre 2007 à 06:58
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=