Partagez
Aller en bas
Victor000.1
Victor000.1
Membre

Nombre de messages : 385
Age : 23
Localisation : Picardie
Distinction : Crayon d'Or session n°3
1er membre de la communauté Curse
Date d'inscription : 09/05/2015

Résolu Script HUD

le Ven 3 Juil 2015 - 1:45
Bonjour,

Je suis en train de travailler sur un A-RPG et le système de regain des MP est gérer via un évènement commun qui calcule la position du héros pour que, lorsqu'il rentre dans la zone, il puisse regagner ses MP.

Ce système fonctionne bien.. mais voilà. J'utilise le script de Khas (Sapphire Action System. V4.4) et son script de HUD qui gère l'affichage :

- une barre de PV
- une barre de MP
- une barre d' EXP
- l' affichage de l'icône de la compétence équipé.

Mon problème est que, lorsque le personnage rentre dans la zone, la barre de MP, et de PV aussi, ne se rafraîchissent pas automatiquement.

Il faut soit réutiliser une compétence, soit entrer dans le menus pour que les barres se rafraîchissent.

Voici la portion de script qui me semble être en cause.

Code:
class Sapphire_Hud
  include HUD_Core
  def initialize
    @contents = Sprite.new
    @background = Sprite.new
    @base = Sprite.new
    @contents.bitmap = Bitmap.new(Contents_Width, Contents_Height)
    @base.bitmap = Bitmap.new(Contents_Width, Contents_Height)
    @background.bitmap = Cache.system(Background_Name)
    @base.bitmap.font.bold = Font_Bold
    @base.bitmap.font.italic = Font_Italic
    @base.bitmap.font.size = Font_Size
    @base.bitmap.font.color = Font_Color
    @base.bitmap.font.name = Font_Name
    @contents.z = 200
    @background.z = 210
    @base.z = 220
    @locked = false
    hide(true)
  end
  def refresh_bars(current_hp=@actor.hp)
    return if @hidden
    hp = ((current_hp)*Health_Width)/@actor.mhp
    mp = (@actor.mp*Magic_Width)/@actor.mmp
    exp = ((@actor.exp-@actor.current_level_exp)*Exp_Width)/(@actor.next_level_exp-@actor.current_level_exp)
    @contents.bitmap.clear
    @contents.bitmap.fill_rect(Health_X,Health_Y,hp,Health_Height,Health_Color)
    @contents.bitmap.fill_rect(Magic_X+Magic_Width-mp,Magic_Y,mp,Magic_Height,Magic_Color)
    @contents.bitmap.fill_rect(Exp_X,Exp_Y,exp,Exp_Height,Exp_Color)
  end
  def refresh_base
    return if @hidden
    @base.bitmap.clear
    @actor = $game_party.members[0]
    skill = $game_player.current_skill[0]
    @base.bitmap.draw_text(Name_X, Name_Y,100,Font_Size+4,@actor.name)
    @base.bitmap.draw_text(Level_X, Level_Y,64,Font_Size+4,Level_String+@actor.level.to_s,1)
    temp = Cache.system("Iconset")
    unless skill.nil?
      @base.bitmap.draw_text(Spell_X,Spell_Y,68,Font_Size+4,skill.name)
      @base.bitmap.blt(Icon_X,Icon_Y,temp,Rect.new(skill.icon_index%16*24,skill.icon_index/16*24,24,24))
    else
      @base.bitmap.blt(Icon_X,Icon_Y,temp,Rect.new(No_Skill_Icon%16*24,No_Skill_Icon/16*24,24,24))
    end
    temp.dispose
    temp = nil
  end
  def hide(lock=false)
    unless @background.nil?
      @background.bitmap.dispose
      @background.dispose
      @background = nil
    end
    unless @base.nil?
      @base.bitmap.dispose
      @base.dispose
      @base = nil
    end
    unless @contents.nil?
      @contents.bitmap.dispose
      @contents.dispose
      @contents = nil
    end
    @hidden = true
    @locked = lock unless @locked
  end
  def show(unlock=false)
    @actor = $game_party.members[0]
    return if @locked && !unlock
    @contents = Sprite.new
    @background = Sprite.new
    @base = Sprite.new
    @contents.bitmap = Bitmap.new(Contents_Width, Contents_Height)
    @base.bitmap = Bitmap.new(Contents_Width, Contents_Height)
    @background.bitmap = Cache.system(Background_Name)
    @base.bitmap.font.bold = Font_Bold
    @base.bitmap.font.italic = Font_Italic
    @base.bitmap.font.size = Font_Size
    @base.bitmap.font.color = Font_Color
    @base.bitmap.font.name = Font_Name
    @contents.z = 200
    @background.z = 210
    @base.z = 220
    @hidden = false
    refresh_base
    refresh_bars
    @locked = false
  end
end


Si vous avez des astuces pour contourner le problème, et surtout des explications, je suis preneur,
Merci Smile


Dernière édition par Victor000 le Ven 3 Juil 2015 - 11:44, édité 1 fois
vincent26
vincent26
Membre

Nombre de messages : 766
Age : 24
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Résolu Re: Script HUD

le Ven 3 Juil 2015 - 10:46
Fait cette appel de script :

$game_map.sas_hud.refresh_bars
Victor000.1
Victor000.1
Membre

Nombre de messages : 385
Age : 23
Localisation : Picardie
Distinction : Crayon d'Or session n°3
1er membre de la communauté Curse
Date d'inscription : 09/05/2015

Résolu Re: Script HUD

le Ven 3 Juil 2015 - 11:44
HO, Merci pour cette réponse rapide.

J'y avais pensé, mais je n'y était pas arrivé.

Si je comprend bien,
tu appelles "game_map" car c'est la classe d'origine de "sas_hud", et ensuite "refresh_bar" est la fonction de "sas_hud" qu'il fallait relancer ?

(c'est certainement très mal dit ^^' )

Encore Merci Smile
vincent26
vincent26
Membre

Nombre de messages : 766
Age : 24
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Résolu Re: Script HUD

le Ven 3 Juil 2015 - 23:57
C'est totalement exact Smile
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum