| Système de messagebox | |
|
|
Auteur | Message |
---|
Lahn Pas mal
Messages : 35
| Sujet: Système de messagebox Lun 13 Aoû 2012 - 21:44 | |
| Salut ! Je commence à réfléchir sur un système de messagebox un poil avancé : -Affichage lettre par lettre -Changement de couleurs pendant l'affichage du message -Affichage d'une variable. Pour l'instant j'ai réussis à faire ça : - Code:
-
var mess,ax,ay,i,w,c;
keyboard_clear(vk_space)
ax=argument0+view_xview ay=argument1+view_yview mess=argument2
//Affiche le fond de la boite draw_sprite(MessageBox_Spr,0,ax,ay)
i=0 w=0 var loop ; loop = true
// Demarre une boucle pour freezer le jeu. while (loop) { io_handle() //Si on appuie sur la touche valider, la lettre suivante apparait, si on est à la fin du message, la boucle se termine if keyboard_check(global.key_A) {if i>=string_length(string(mess)) {loop=false} else {w=200} }
//Affiche une lettre toute les 200 frames. w+=1 if w>=200 and i<string_length(string(mess)){ sound_play(LA_Text_Letter) // On recupère la lettre dans la variable c c = string_char_at(string(mess), i+1)
//Si la lettre est un "\", et que la lettre d'après est un "n", on les effacent, et on descend d'une ligne. if c=="\"{ if string_char_at(string(mess), i+2)=="n"{ c="" ay+=10 ax=argument0+view_xview } //Si c'est un p on affiche la variable global.name if string_char_at(string(mess), i+2)=="p" {mess=string_insert(string(global.name),mess,i+1)}} draw_text(ax+2,ay+2,c) i+=1 ax+=8
w=0}
//Rafraichit l'écran screen_refresh() } message="" keyboard_clear(global.key_A) Mais avec ça, j'arrive à faire l'affichage lettre par lettre, mais lors du retour à la ligne, j'arrive pas à effacer le repère qui me sert de retour à la ligne ( "\n" ). De même pour les couleurs, il me suffira d'utiliser draw_text_color, mais comment faire pour que selon le texte que j'écrit, ça me donne une couler ? ( Avec comme code "\c[X]" avec X un chiffre par exemple. Ou tout simplement \r pour le rouge, \b pour le bleu, etc ... ) Et pour finir, je voudrais afficher le contenu de la variable global.name avec la commande "\p". J'ai bien essayer un truc, mais il me fait tout bugguer ( Il me donne une infinité de "/n" ) ... Merci d'avance ! |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Système de messagebox Lun 13 Aoû 2012 - 22:22 | |
| Première remarque, je ne vois aucun sleep dans ta boucle. Il vaut mieux faire un sleep(w) pour attendre w millisecondes, sinon la vitesse d'exécution sera différente selon le PC. Il se peut même que le scheduler considère ton programme comme un traitement lourd et réduise sa priorité, en faisant ramer ton jeu !
Sinon, je crois que tu as tout simplement oublié de faire i += 2 après ton retour à la ligne, pour te retrouver derrière le "\n" :) |
|
| |
Lahn Pas mal
Messages : 35
| Sujet: Re: Système de messagebox Lun 13 Aoû 2012 - 22:39 | |
| Pour le i+=2, effectivement, ça marche bien pour le retour à la ligne =P.
Par contre, pour le sleep, le défaut, c'est que ça me permet pas de faire défiler le texte plus vite =/. |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Système de messagebox Lun 13 Aoû 2012 - 22:46 | |
| Ben, bien sûr que si ! - Code:
-
var delay; delay = argument...;
while(loop) { sound_play( LA_Text_Letter );
...
sleep(delay); } Et voilà, tu as un paramètre pour déterminer combien attendre entre deux lettres :) |
|
| |
Lahn Pas mal
Messages : 35
| Sujet: Re: Système de messagebox Lun 13 Aoû 2012 - 23:03 | |
| Ah ouais, utiliser une variable pour définir le temps d'attente c'est une super idée ! Merci . Pour la couleur, j'ai réussis à faire avec \r du coup, mais si je pouvais faire l'autre solution ça m'arrangerais, mais je vois pas comment faire ^^". ( Puisque là le nombre de caractère derrière le \ est variable ) |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Système de messagebox Mar 14 Aoû 2012 - 0:50 | |
| tu détectes le "\c", ensuite tu isoles tous les caractères (des chiffres donc) jusqu'au prochain espace, et tu utilises real() pour le parser en nombre entier ;) |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Système de messagebox Mar 14 Aoû 2012 - 10:08 | |
| Par contre si je peut me permettre, il vaux mieux éviter d'utiliser sleep. Il est possible d'utiliser une variable pour attendre x steps a la place. |
|
| |
Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: Système de messagebox Mar 14 Aoû 2012 - 11:14 | |
| Le truc avec sleep c'est que le jeu va freezer. |
|
| |
supmaster004 Utilisateur confirmé: Rang *****
Messages : 2189 Localisation : x=23.256842 y=43.456879 Projet Actuel : Faire des parodies de jeux en 1h
| Sujet: Re: Système de messagebox Mar 14 Aoû 2012 - 12:02 | |
| Sinon, plutôt que de faire une boucle qui va freezer le jeu, tu peux tout simplement remplacer ta boucle par un ensemble de steps. Ca te permet de faire des trucs en même temps que ton texte (genre une bouche qui parle) |
|
| |
Lahn Pas mal
Messages : 35
| Sujet: Re: Système de messagebox Mar 14 Aoû 2012 - 15:30 | |
| Utiliser les step, ça voudrais dire bloqué tout les objets quand le step s'effectue, donc bon, ça me parait pas être une super idée. ( Puisque TOUT les objets sont mis en pause, y a que l'affichage du message qui s'effectue, tout le reste ne bouge pas. )
Donc au final c'est quoi le mieux, sleep, ou utilisé une variable comme j'avais fait ? Vu que tout est freezer sauf l'affichage du texte, utiliser sleep() ou une variable reviendra au même pour l'arrêt des autres objets, autant utiliser sleep() non ?
Pour les couleurs, finalement, j'vais rester avec les \r, ça sera moins ****** à coder ^^".
J'ai réussis à afficher ma variable, donc il me reste juste à savoir si vaut mieux utiliser sleep() ou une variable et ce sujet est résolu. |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Système de messagebox Mar 14 Aoû 2012 - 18:45 | |
| Je signale que j'ai proposé l'usage du sleep parce que sa boucle faisait déjà freezer le jeu, mais était régulée en surchargeant le processeur :p
Le truc c'est que pour changer de couleur à loisir il faut gérer la boucle d'affichage soi-même, donc de toute manière une bouche animée ou autre devra être faite manuellement. Ça change pas grand-chose, et je pense qu'il vaut mieux que le jeu freeze le temps de l'affichage du message (mais c'est un choix). |
|
| |
supmaster004 Utilisateur confirmé: Rang *****
Messages : 2189 Localisation : x=23.256842 y=43.456879 Projet Actuel : Faire des parodies de jeux en 1h
| Sujet: Re: Système de messagebox Jeu 16 Aoû 2012 - 9:30 | |
| moi j'aime pas trop utiliser freeze, puis de toutes façons dans la plupart de mes jeux les persos parlent en bougeant donc bon.... |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Système de messagebox Jeu 16 Aoû 2012 - 14:00 | |
| Je le répète, rien n'empêche de synchroniser avec la boucle principale du jeu. Je n'ai fait que suggérer une temporisation pour faire les choses plus proprement, mais de visu le résultat est le même que son script original. |
|
| |
Contenu sponsorisé
| Sujet: Re: Système de messagebox | |
| |
|
| |
| Système de messagebox | |
|