Afficher et manipuler du texte dans RPG Maker !
{Scripts toutes versions}
L'affichage d'information à l'écran est une tâche très complexe (et d'ailleurs, même l'Event Extender le fait bien mal). Voici donc un script permettant d'afficher très facilement des textes à l'écran, de les contrôler, de les styliser !
- Nuki, 12/11/2014 à 08h48.


Afficher et manipuler du texte dans RPG Maker ! - Nuki

Afficher et manipuler du texte dans RPG Maker !


{Script pour toutes versions}

Afficher des dégâts, des points de vies, des informations, c'est très très long ! L'objectif de ce script est de rendre tout ça très simple, au moyen de commandes courtes et facilement compréhensible !


icone Introduction


L'objectif de ce script est de permettre l'affichage de textes à l'écran (sur une map), à la manière (simple) des images de RPGMaker. Ce script offre une routine de génération de profile et de couleur pour ne pas devoir réécrire sans arrêt les paramétres de mise en forme de la typographie.

Un script multi-plateforme


Ce script avait été initialement conçu pour RPG Maker VXAce, cependant, son "succès" m'a fait le rédiger pour XP et VX. Cette réécriture à entraîné la construction d'un script permettant de gérer facilement les scripts "cross-version". Il est donc obligatoire, avant d'installer l'afficheur de textes, d'installer ce script, nommé bien modestement Standardize RGSS, dont le manuel est actuellement disponible sur cette page :

Page du Standardize RGSS.

Actuellement, l'afficheur de texte est le seul de mes scripts qui est multi-plateforme au moyen du script StandardizeRGSS, cependant, quand le temps me le permettra, je n'hésiterai pas à en faire plus Smiley

icone Installation



Comme n'importe quel autre script, insérez les scripts au-dessus de Main, dans la rubrique Materials, et nommez les comme bon vous semble :

- StandardizeRGSS (lien du script)
- DisplayText (lien du script)
- Un script vierge où vous écrirez vos profils. (Par exemple, vous pouvez le nommer "Profils".)

C'est dans ce script vierge que vous sauvegarderez vos couleurs et vos profils. Nous nous étendrons sur ces notions dans le rubrique suivante.

icone Les couleurs


Les couleurs et les profils sont un petit peu la killerfeature de ce script. En effet, vous pouvez sauvegarder des comportements et des couleurs, pour ne pas devoir chaque fois, écrire des commandes d'affichage de texte trèèès longues !

Créer une couleur


Rendez-vous dans le script vierge que je vous avais conseiller de faire en dessous de l'afficheur et il suffit d'utiliser cette commande :
Code (Ruby):
  1. create_color(R,V,B,*O).register(:nom_désiré)



R étant la valeur de rouge de la couleur (de 0 à 255)
V étant la valeur de vert de la couleur (de 0 à 255)
B étant la valeur de bleu de la couleur (de 0 à 255)
*O étant l'opacité de la couleur (de 0 à 255) (Cet argument peut être ommis, par défaut, il vaut 255).


Vous pouvez évidemment créer autant de couleurs que vous le désirez !
Le script propose par défaut une série de couleurs, je vous montre le code pour que vous voyiez comment en créer mais il ne faut pas le réécrire dans votre script vierge, car elles existent déjà Smiley

Code (Ruby):
  1. create_color(255,255,255).register(:white)
  2. create_color(255,0,0).register(:red)
  3. create_color(0,255,0).register(:green)
  4. create_color(0,0,255).register(:blue)
  5. create_color(0,0,0).register(:black)
  6. create_color(167,127,218).register(:bilou)


Accéder à une couleur


Pour accéder à une couleur, il suffit d'utiliser la commande :
Code (Ruby):
  1. get_color(:nom_de_la_couleur)

Le nom a utiliser est évidemment celui que vous avez choisi dans la membrane "register". Par exemple, par défaut, les couleurs accessibles sont les :white, :red, :green, :blue, :black.

icone Les profils


Comme pour les couleurs, il est possible de sauvegarder des mise en forme (graisse d'un texte, couleur, contour, couleur des contours etc.).
Toutes ces caractéristiques sont stockées dans des profils. Comme pour les couleurs, les profils sont sauvegardables et réutilisable.

Créer un profil


La commande create_profile crée un profil vierge (identique au profil :default) et create_profil(autre_profil) crée un profil qui a les mêmes caractéristiques que l'autre profil passé en argument.
Les attributs d'un profil sont :

font Le nom de la police à utiliser (ou la liste de noms de polices à utiliser)
size La taille de la police
color La couleur du texte (on peut utiliser get_color et utiliser une couleur prédéfinie)
italic Prend true pour être italic, false pour ne pas l'être
bold Prend true pour être en gras, false pour ne pas l'être
outline Prend true pour avoir un contour, false pour ne pas en avoir (ne fonctionne que sur vx et ace)
outline_color La couleur du contour (on peut utiliser get_color et utiliser une couleur prédéfinie) (ne fonctionne que sur vx et ace)
shadow Prend true pour avoir une ombre, false pour ne pas en avoir (ne fonctionne que sur ace)
multiline Prend true pour permettre le texte multiligne, false pour ne permettre qu'une seule ligne


Exemple de création de deux profils dans un script vierge en dessous du script

Code (Ruby):
  1. # Création du premier profil
  2. unprofil = create_profile
  3. unprofil.color = get_color(:red)
  4. unprofil.font = "Impact"
  5. unprofil.italic = false
  6. unprofil.bold = false
  7. unprofil.outline = false
  8. unprofil.shadow = false
  9. unprofil.size = 22
  10. unprofil.register(:profilA)
  11.  
  12. # Création du second profil
  13. unautreprofil = create_profile(get_profile(:profilA))
  14. unautreprofil.color = get_color(:green)
  15. unautreprofil.register(:profilB)


Comme vous pouvez le voir, il n'est pas nécéssaire de spécifier tous les attributs lors de la création d'un profil. Par exemple, la création du profil 2 se basera sur les données du profil 1 et seul la couleur sera changée. Quand aucun profil n'est passé en argument, c'est le profil par défaut qui est utilisé en modèle.
Vous pouvez maintenant vous servir de ces deux profils pour mettre en forme du texte. A noter que l'on peut décrire autant de profil que l'on veut. (C'est pour ça que comme pour les couleurs, je les mets dans un script en vierge en dessous de ce script. Pour accéder rapidement à tous les profils/couleurs créé(e)s).

Notes sur l'attribut font
Généralement, cet attribut prend en argument une chaine de caractères, mais il est possible de lui passer une liste (["police1", "police2" etc.]) et si la première police n'est pas trouvée, il passe à la suivante etc.

Notes sur l'attribut multiline
Pour effectuer un retour à la ligne, dans le texte (nous verrons plus tard comment en créer) il suffit de faire, dans l'appel de script, un retour à la ligne ou alors d'utiliser le caractères \n.

Accéder à un profil


Comme pour la couleur, il suffit d'utiliser la commande get_profile(:nom_du_profil). Il n'existe, par défaut, qu'un seul profil, il s'agit de [/strong]get_profile(:default)[/strong] qui correspond à la mise en forme standard de texte selon RPG Maker.

icone Afficher et déplacer du texte à l'écran


Maintenant que nous avons vu comment créer des profils et des couleurs, nous allons afficher du texte (et le déplacer) à l'écran. Les commandes s'appellent au moyen d'appels de scripts.
Comme pour les images, les textes sont référencés par un ID (qui est un chiffre). Il n'y a pas de limitation explicite, mais attention, trop de textes différents peuvent faire laguer le jeu (comme pour les images).

Afficher du texte



Code (Ruby):
  1. text_show(id, text_value, profile, x, y, zoom_x = 100, zoom_y = 100, opacity = 255, blend_type = 0, origin = 0)


Cette commande permet d'afficher du texte à l'écran. Voyons ses arguments :

id correspond au nombre, ID, où afficher le texte(de 1 à ce que vous voulez)
text_value le texte a afficher
profile le profil pour mettre en forme le texte (accessible via get_profile(:nom))
x et y la position du texte
zoom_x et zoom_y le pourcentage d'agrandissement (par défaut ils valent tout deux 100%)
opacity l'opacité du texte (de 0 à 255) (par défaut cet argument vaut 255)
blend_type le mode de fusion (0 = normal, 1 = addition, 2 = soustraction), par défaut il vaut normal
origin 0 pour l'origine en haut à gauche du texte, 1 pour le centre comme origine.



Les arguments de zoom_x sont facultatif, leur valeur est indiquée. Cependant, on ne peut profiter des valeurs par défaut que si tous les arguments sont spécifiés. On ne peut donc pas profiter de la valeur par défaut de zoom_x si l'on veut spécifier zoom_y (ce qui est logique).


Voici quelques exemples d'affichages de textes (en prenant les profils précédemment créés)
Code (Ruby):
  1. text_show(1, "Salut", get_profile(:profilA), 10, 15)
  2. text_show(2, "Aurevoir", get_profile(:profilB), 30, 30, 100, 100, 120)
  3. text_show(3, "Nuki", get_profile(:profilA), 50, 70, 150, 75, 255, 1, 1)


Ce qui donne :



Déplacer du texte affiché


[tab\]Cette commande fonctionne presque comme la commande déplacer une image de RPG Maker
Code (Ruby):
  1. text_move(id, duration, wait_flag, x = -1, y = -1, zoom_x = -1, zoom_y = -1, opacity = -1, blend_type = -1, origin = -1)


id correspond au nombre, ID, où afficher le texte(de 1 à ce que vous voulez)
duration la durée de modification
wait_flag Si il vaut true, le jeu se bloquera pendant le déplacement du texte, s'il vaut false, le jeu continuera malgré le déplacement
x et y la position du texte
zoom_x et zoom_y le pourcentage d'agrandissement (par défaut ils valent tout deux 100%)
opacity l'opacité du texte (de 0 à 255) (par défaut cet argument vaut 255)
blend_type le mode de fusion (0 = normal, 1 = addition, 2 = soustraction), par défaut il vaut normal
origin 0 pour l'origine en haut à gauche du texte, 1 pour le centre comme origine.


Comme pour la commande précédente, les arguments à partir de x (inclus) ont une valeur par défaut, il s'agit de -1, qui indique que l'attribut doit garder la même propriété. Donc par exemple :

Code (Ruby):
  1. text_move(1, 60, true, 500) # déplacera le texte 1 à 500px de l'écran en 60 frames (bloquant le jeu). Les autres propriétés garderont leurs valeurs.
  2. text_move(2, 120, false, -1, -1, 200, 200) # zoomera le texte a 200% en x et 200% en y, en 120 frames, sans bloquer le jeu, en conservant les autres propriétés.
  3. text_move(3, 40, false, -1, -1, 200, 30, 0) # vous zavez compriz :v


Ce qui donne :



Autres fonctionnalités


Il est aussi possible de ne modifier que le contenu du texte ou le profil et de supprimer les textes Smiley:


text_erase(id) supprime le texte dont l'id est passé en argument
text_change(id, nouveau_texte) Change le texte affiché
text_change_profile(id, nouveau_profil) Change le profil du texte passé en argument. (profils accessibles via get_profile)
text_rotate(id, speed) fait tourner le texte (autour de son origine) à la vitesse passée en argument. Pour inverser le sens, il suffit de mettre une vitesse négative.
text_opacity(id, value) Change l'opacité d'un texte. (De 0 à 255)



icone Aller plus loin


Pour que ce script soit réellement utile, il doit être facile d'afficher des valeurs issues de RPGMaker. Pour cela, je conseille fortement de le joindre à l'Event Extender qui permet de récupérer facilement une multitude d'informations !

Afficher n'importe quelle expression Ruby


En utilisant la syntaxe #{expression_ruby}, il est possible d'afficher du contenu ruby. Par exemple :
Code (Ruby):
  1. "Contenu de la variable 5 : #{$game_variables[5]}"

ou encore, via l'Event Extender :
Code (Ruby):
  1. "Contenu de la variable 5 : #{V[5]}"

De même qu'il est aussi possible d'effectuer des calculs :
Code (Ruby):
  1. "Contenu de la variable 5 + 3 : #{V[5] + 3}"



Exemple d'utilisation avancée... Par Spyrojojo !


Notre cher ami Spyrojojo nous a fait l'honneur de faire une excellente démonstration Smiley:



Le fond de la bulle de dialogue ainsi que le rectangle sous le nom "Electroll" est une image en dessous du texte, il n'a pas été généré par ce script. Mais tous les textes sont affichés et animés avec ce script. :)

icone Conclusion


Ce script est réellement utile pour afficher le nombre de points de vies ou faire des systèmes de dégâts ! J'espère qu'il vous sera utile et n'hésitez pas à partager dans les commentaires vos résultats ou vos questions !
Bien à vous. Nuki

Index

Tags

Annonces
Bilou Concept
BilouCorp
Découvertes
Event Extender
Jeux
RPG Maker
Script
Tutoriel

Auteurs

2cri
Grim
Hiino
Joke
Nuki
PypeBros
Raho
S4suk3

Suivez nous
Rss

Poster un commentaire



Commentaires

Tibluedream
Oublié ce que j'ai dit j'ai trouvé un moyen de contourné le problème en allant changé directement sur l'origine.

def update_origin
if @text.origin == 0
self.ox = 0
self.oy = 0
else
self.ox = bitmap.width / 2.5
self.oy = bitmap.height #/ 2
end
end Posté le : 27/11/2016 à 06h00
Tibluedream
Bonjour, j'aimerais savoir, j'ai modifié dans dysplayText cette ligne pour aligné au centre de mon cadre quelque soit le texte iscrit

def update_position
self.x = @text.x - bitmap.width / 2.5 #ici
self.y = @text.y
self.z = @text.number
end

Mais le problème est lorsque j'appelle la command

text_erase(1)

Le message d'erreur suivant se met vous pourriez me dire mon erreur?
et comment y remédier

"___________________________________________"
Script 'Display_Text' line455: NoMethodError occured
undefined method 'width' for nil:NilClass
"___________________________________________"

Posté le : 27/11/2016 à 04h35
Dragonfive
Ce script est excellent. Etant particulièrement nul en Ruby, je désespérais de trouver une solution à mon problème... Puis je suis tombé là dessus. Et là, je reprend espoir.

Je me heurte juste à un problème... Je n'arrive pas à récupérer d'informations venant de RPG Maker. Je souhaiterais pouvoir afficher en continu la valeur d'une variable, mais je ne comprend pas comment la récupérer malgré les explications données. Pouvez-vous m'aider? Posté le : 13/06/2015 à 22h52
spyrojojo
Ça a été un vrai plaisir ;) Posté le : 14/11/2014 à 02h07
Joke
Grand merci à Spyrojojo pour sa contribution !
(Exemple d'utilisation avancée) Posté le : 14/11/2014 à 02h06
Joke
Ce script est divin. :) Posté le : 13/11/2014 à 19h01
spyrojojo
Ce script est tout simplement génialisime . Je l'utilise pour mon projet et je ne le regrette pas . Simple a utilisé , il n'y a rien a redire dessus. Posté le : 12/11/2014 à 12h21