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) !
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 |
| >| >| > 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.