RMEx
RMEx

Community


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]

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 :



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

Voir le profil de l'utilisateur
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 !


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.

Voir le profil de l'utilisateur
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+

Voir le profil de l'utilisateur

nuki

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

Voir le profil de l'utilisateur
C’était exactement ça !
Merci Smile

Voir le profil de l'utilisateur

6

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