Animation de menu "RÉSOLU"

Voila bonjour à tous et merci 4rian pour tout.

Je débute à peine Gd et je ne suis pas forcément familier avec la création de jeu à la base. J’ai fini le tuto et je pense avoir cerné le principe du logiciel.
J’ai commencé mon propre jeu et je bute déjà sur un problème d’animation au menu. Je veux simplement faire disparaître un objet au bout de 3 secondes donc j’ai programmé comme ceci :

Le chronomètre “disparition” est supérieur à 3 secondes ; action : cacher l’objet en question

C’est mon unique et premier évènement.
Seulement quand je lance l’aperçu, l’objet en question disparaît immédiatement.

Je sais ça doit être anodin pour vous mais pour moi ça veut dire beaucoup, ça veut qu’il était libre, he-

Pardon.

Bon j’ai trouvé tout seul.

Il suffisait de créer une condition “au lancement de la scène” et de mettre en action “remettre à zéro le chronomètre”

Seulement maintenant je veux lancer une musique, j’ai converti un mp3 en ogg avec le logiciel directement et ai créé un sous-évènement sans condition avec une action “jouer la musique sur le canal zéro”.

Mais rien ne se passe…

Bon ok il fallait de même créer l’évènement “le chronomètre “un tel” est supérieur à 0 secondes”

Voila donc merci à mes parents.

Bon disons que je sois pas venu pour rien, j’essaye maintenant de faire disparaître mon objet à un moment aléatoire dans les 20 secondes qui suivent le début de la scène et le faire réapparaître quelques dixièmes de secondes après. J’ai donc testé un random(20) pour la disparition mais l’objet disparaît encore une fois trop vite…

If faut que tu fasses un événement que quand le chrono est supèrieur à 20 ca diminue l’opacité mais très peu. Du coup ton objet disparaitra au fur-et-à-mesure :wink:

Si tu ne vois pas je peux être plus précis.

Bizarre que t’es besoin de créer un chrono juste pour ça.

Normalement, ta page d’évènement devrait ressembler à ce qui suit :

[code]Au lancement de la scène :
Jouer la musique “truc.ogg” sur le canal 0
variable de la scène “Apparition-Disparition” = 0
variable de la scène VitesseAnim = random(5)+1

Si temps depuis le début de la scène > 3 secondes
|-> si Opacite de l’objet = 0
variable de la scène “Apparition-Disparition” = 1
variable de la scène VitesseAnim = random(5)+1
|-> si Opacite de l’objet = 255
variable de la scène “Apparition-Disparition” = 0
|-> Si apparition-disparition = 0
Opacite de l’objet = -VitesseAnim
|-> Si Apparition-Disparition = 1
Opacite de l’objet = +VitesseAnim[/code]

J’initialise au lancement de la scène.
A partir de 3 secondes depuis le début de la scène, je fais apparaitre-disparaitre progressivement l’objet, à une vitesse aléatoire.

J’ai essayé ton code, mais après avoir disparu, il ne réapparaît plus.

On va faire un truc : Avant de poster un code, assurez-vous qu’il fonctionne. Testez-le avant. Sinon ça ne sert à rien, tout le monde poste du faux code, et après que font les novices ? Ils copient bêtement. Donc vérifiez que votre code est correct.

Les expressions “aléatoire” sont buggés. Essaye random(100). Si cela ne te conviens essaye une autre valeur. Tu n’y peux rien.

Comment ça “buggées” ? Tu demandes Random(20) ça te renvoie un nombre compris entre 0 et 20, c’est tout. Mais l’expression Random n’a jamais été “buggée”…

Essayes avec des chronos.

au lancement de la scene remettre a zero le chrono “apparition”
Si le chrono “apparition” est supérieur a 20sec faire apparaitre objet “objet”

D’accord, première nouvelle : l’expression Random est buggée !

En fait je voulais dire chrono supèrieur à 3 (comme il le voulait quoi) mais j’étais fatigué :smiley:

Avant de dire que quelquechose est buggé, il faut réfléchir deux secondes.
Si tu mets Random(100) par exemple dans une condition de chronomètre, à chaque fois que GD lira l’événement (à chaque image), GD interprétera de nouveau l’expression qui lui est donné. Donc, dans le cas du Random, cela génèrera un nouveau nombre aléatoire.
Résultat : Si vous voulez utiliser un nombre aléatoire dans une condition chronomètre, enregistrez ce nombre aléatoire dans une variable au lancement de la scène et utilisez cette dernière dans la condition chronomètre.

Ca fonctionne de mon coté.

Avec quelques modifs néanmoins (utilisation du comparateur de fonction pour déterminer le temps passé depuis le début de la scène).

Faut être un peu souple aussi.
Person je donne d’abord des algorithmes. Pas envie de me prendre la tête à faire un nouveau projet à chaque demande “à priori” simple.
A l’intéressé ensuite d’adapter ce schema à son code.

Projet etoo etoo : http://www.megaupload.com/?d=Q8XP0WU4

Tu as enfrein une règle très importante dans les jeux vidéos : les animations doivent s’exécuter à la même vitesse quelle que soit la puissante de l’ordi. Ici, l’objet va disparaître plus vite sur un ordi puissant et plus lentement sur un ordi lent. Bref, Utilisez TimeDelta().

ATTENTION : Il ne faut surtout pas utiliser TimeDelta() dans les actions de déplacement (les forces).

Sorry.
Je n’ai toujours pas eu le loisir de mettre en pratique cette histoire de TimeDelta().
J’évite donc de m’en servir pour le moment.

Quoique dans l’exemple actuel, je ne vois pas trop où elle serait pertinente.
La disparition se fait par cycle GD, et avec le random, on a quand même une image qui clignote à vitesse variable. la précision de la vitesse de clignotement ne me semble pas essentielle dans ce cas.

EDIT :
Optimisation Powa !!!
[attachment=0]ImageClignotte.png[/attachment]

Question subsidaire : quelle est l’unité de TimeDelta() ?
La seconde, apparemment ?
Donc, pour avoir un cadence toutes les 1 frames, on doit mettre 1/60 = 0.016 ?

En fait, le “cycle GD” comme tu dis, n’est rien d’autre que la vitesse de rafraichissement de l’image : Ça peut donc varier d’un ordinateur à l’autre.

Il faut donc moduler les grandeurs qui varient de façon continue avec TimeDelta(). Cette expression renvoie le nombre de seconde qui se sont écoulées depuis la dernière image.
Ainsi, si on fait :

Faire +500*TimeDelta() à la variable MaVariable

Cette variable MaVariable augmentera de 500 par seconde, quelque soit le PC utilisé, quelque soit la vitesse de rafraichissement du jeu.

En regardant rapidement tes évènements, il faudrait donc rajouter *TimeDelta() aux sous évènements 2 et 3. Tu devra alors sans aucun doute augmenter sensiblement la valeur de ta variable VitesseAnim ( Si tu veux une apparition/disparition en 1 seconde, il te faudra mettre une valeur de l’ordre de 255 ), mais ça devrait ensuite marcher sans problème.

EDIT :

Oui la seconde.
La cadence de rafraichissement est soit limité par le jeu ( 60 par défaut ), soit c’est cas c’est le PC qui va la limiter au maximum de ses possibilités.
Si ton jeu tourne à 60 images par secondes, TimeDelta() renverra en effet 1/60 = 0.016.

REDIT : Houlà, houlà, c’est quoi ce TimeDelta() > 0.001 ??

Je vous avoue être totalement paumé.

Remonte un peu plus haut.
J’ai un post où j’ai mis mon projet exemple sur megaupload.
Tu le récup, tu teste, et tu l’adaptes à tes besoins.

Pour le TimeDelta(), t’en occupes pas. C’est un truc de puriste. :neutral_face:

C’est du pifomètre.
La méthode la plus sure pour produire du code quand on n’a aucune idée de comment le produire. :sunglasses:

C’est du pifomètre.
La méthode la plus sure pour produire du code quand on n’a aucune idée de comment le produire. :sunglasses:
[/quote]
Le pifomètre… intéressant. Toi tu devrais créer un language. C’est d’une reflexion ahurissante ! Désolé, je viens de m’éffondrer devant mon écran… X)