RMEx
RMEx

Community

Le deal à ne pas rater :
Cartes Pokémon 151 : où trouver le coffret Collection Alakazam-ex ?
Voir le deal

Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

[Système] Affichage de "coeurs"

Voir le sujet précédent Voir le sujet suivant Aller en bas  Message [Page 1 sur 1]

Moretto


Salut,

Pour mon projet je cherche à afficher la vie du héros sous forme de "cœurs".
J'ai trouvé un moyen d'y parvenir mais je me demande si il n'y a pas un moyen plus élégant...

Voila comment j'ai fait :

[Système] Affichage de "coeurs" Sans_t13

Je supprime à chaque fois tous les cœurs pour les ré-afficher, je n'arrive pas à trouver un moyen de supprimer uniquement ceux perdu...

Je suis à votre écoute Laughing

Grim


Coucou, ta méthode n'est pas mal du tout, cependant, tu as raison, je pense qu'il y a moyen de faire un peu mieux !
Personnellement, j'ai essayé cet exercice. Par soucis de paranoïa, je préfère conserver le système de point de vue de RPGMaker. Je pars donc du principe qu'une séquence de coeur est affichée par étape. Par exemple, si je définis que mon étape est = 1 coeur tout les 100 points de vies, avec 550 points de vie, j'aurai 5 coeur et un 6ème coeur "plus petit" dont la taille est définie par le pourcentage restant pour construire un 6ème coeur. Pour calculer le nombre de coeur à afficher je n'ai qu'a faire pv/step (l'étape établie) et pour objetenir le %tage du dernier coeur, je n'ai qu'a utiliser la mantisse de (pv/step.to_f)*100 (pour convertir en float).
Pour n'afficher/n'effacer que le strict minimum, il suffit d'un peu de manipulation d'itérateurs (le cours https://github.com/RMEx/RME/wiki/Cr%C3%A9er-des-jauges-en-combat donne de bonne pistes) !
Bonne chance !

[Système] Affichage de "coeurs" PKBm
Event - EV004
| > Appeler Script : L[:offset] = 100
| > Appeler Script : L[:step_hearth] = 100
| > Appeler Script : L[:picture_iterateur] = 0
| > Appeler Script : L[:hp] = actor_hp(1)
| > Appeler Script : L[:nb_hearth] = L[:hp]/L[:step_hearth].to_f
| > Appeler Script : L[:mantisse] = mantissa(L[:nb_hearth])
| > Appeler Script : L[:nb_hearth] = L[:nb_hearth].to_i
| > Appeler Script : SV[1] = 0
| > Commentaire : On affiche tous les coeurs complet
| > Boucle
| >| > Condition : Script : SV[1] == L[:nb_hearth]
| >| >| > Commentaire : On affiche le coeur non complet
| >| >| > Appeler Script : picture_show(L[:offset] + SV[1], "hearth", 10 + (16*SV[1]), 10)
| >| >| > Appeler Script : picture_origin(L[:offset] + SV[1], 1)
| >| >| > Appeler Script : coeff_zoom = L[:mantisse] * 100
| >| >| > Appeler Script : picture_zoom(L[:offset] + SV[1], coeff_zoom, coeff_zoom)
| >| >| > Sortir de la Boucle
| >| >| >
| >| > Sinon
| >| >| > Appeler Script : picture_show(L[:offset] + SV[1], "hearth", 10 + 16*SV[1], 10)
| >| >| > Appeler Script : picture_origin(L[:offset] + SV[1], 1)
| >| >| > Appeler Script : SV[1] += 1
| >| >| >
| >| > Fin - Condition
| >| >
| > Fin - Boucle
| > Boucle
| >| > Attendre : 1 Frames
| >| > Condition : Script : L[:hp] != actor_hp(1)
| >| >| > Appeler Script : L[:old_hp] = L[:hp]
| >| >| > Appeler Script : L[:hp] = actor_hp(1)
| >| >| > Appeler Script : SV[1] = L[:nb_hearth]
| >| >| > Appeler Script : SV[2] = 0
| >| >| > Condition : Script : L[:old_hp] > actor_hp(1)
| >| >| >| > Commentaire : On doit diminuer des coeurs
| >| >| >| > Appeler Script : picture_erase(L[:offset] + SV[1])
| >| >| >| > Commentaire : Calcul du nombre de coeur à supprimer
| >| >| >| > Appeler Script : L[:a_supprimer] = SV[1] - (L[:hp]/L[:step_hearth])
| >| >| >| > Appeler Script : p L[:a_supprimer]
| >| >| >| > Boucle
| >| >| >| >| > Condition : Script : SV[2] == L[:a_supprimer]
| >| >| >| >| >| > Sortir de la Boucle
| >| >| >| >| >| >
| >| >| >| >| > Fin - Condition
| >| >| >| >| > Appeler Script : p SV[2]
| >| >| >| >| > Appeler Script : picture_erase(L[:offset] + SV[1] - SV[2] - 1)
| >| >| >| >| > Appeler Script : SV[2] += 1
| >| >| >| >| >
| >| >| >| > Fin - Boucle
| >| >| >| >
| >| >| > Sinon
| >| >| >| > Commentaire : On doit ajouter des coeurs
| >| >| >| > Appeler Script : picture_zoom(SV[1], 100, 100)
| >| >| >| > Appeler Script : L[:a_ajouter] = (L[:hp]/L[:step_hearth]) - L[:nb_hearth]
| >| >| >| > Boucle
| >| >| >| >| > Condition : Script : SV[2] == L[:a_ajouter]
| >| >| >| >| >| > Sortir de la Boucle
| >| >| >| >| >| >
| >| >| >| >| > Fin - Condition
| >| >| >| >| > Appeler Script : picture_show(L[:offset] + SV[1] + SV[2], "hearth", 10 + 16*(SV[1] + SV[2]), 10)
| >| >| >| >| > Appeler Script : picture_origin(L[:offset] + SV[1] + SV[2], 1)
| >| >| >| >| > Appeler Script : SV[2] += 1
| >| >| >| >| >
| >| >| >| > Fin - Boucle
| >| >| >| >
| >| >| > Fin - Condition
| >| >| > Commentaire : On affiche le dernier coeur... le tout petit Smile
| >| >| > Appeler Script : L[:nb_hearth] = (actor_hp(1)/L[:step_hearth].to_f)
| >| >| > Appeler Script : L[:mantisse] = mantissa(L[:nb_hearth])
| >| >| > Appeler Script : L[:nb_hearth] = L[:nb_hearth].to_i
| >| >| > Appeler Script : picture_show(L[:offset] + L[:nb_hearth], "hearth", 10+(16* L[:nb_hearth]), 10)
| >| >| > Appeler Script : picture_origin(L[:offset] + L[:nb_hearth], 1)
| >| >| > Appeler Script : coeff_zoom = (L[:mantisse] * 100).to_i
| >| >| > Appeler Script : picture_zoom(L[:offset] + L[:nb_hearth], coeff_zoom, coeff_zoom)
| >| >| >
| >| > Fin - Condition
| >| >
| > Fin - Boucle
| >


Bonne chance.

PS: Avec ce système, si tu veux par exemple que quand le joueur ait 100% de vie il ait tout ses coeurs, il suffit de faire des points de vies par niveau multiples de la variable step.

Moretto


Merci pour ta réponse !

J'avais hésité à utiliser système de hp de rm un peu de la même manière que toi, puis finalement non ^^.

Je vais étudier ça de près et je pense que ça va me donner de bonnes pistes pour progresser !

Une autre question en passant, existe-t-il une manière de connaitre l'id de l'event ? Par exemple :
event_look_at?(0, id de l'event, 1)
Il me semble que c’était possible avec l'EE mais pas moyen de me souvenir de la synthaxe !

A+

nuki

nuki
Admin
Renvoyer l'événement courrant ? tu peux te servir de "me" ou de "@event_id"

Moretto


C’était exactement ça !
Merci Smile

6[Système] Affichage de "coeurs" Empty

Contenu sponsorisé


Voir le sujet précédent Voir le sujet suivant Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum