Sujet n°8942
Posté par quenti77 le 18 Jan - 10:57 (2011)
Titre : Script Afficher_Message*
Bonjour,

Je pense que c'est marqué quelque part mais je n'ai pas trouvé ou : Dans le script Afficher_Message* qui se trouve dans PS DS v0.3
Je voudrais savoir comment on fait un retour à la ligne? Et aussi quel partie du script permet de le faire ?

merci de votre aide

Posté par Sphinx le 18 Jan - 16:34 (2011)
Si le système de PSP DS reprend le système que j'ai créé pour 4G+, un retour à la ligne se fait normalement en intégrant " rtn " à l'endroit du saut de ligne Imbécile heureux

Posté par Nuri Yuri le 18 Jan - 17:31 (2011)
"\r\n" Non ?

Pour le afficher message de PSP c'est pas terrible, je ne vois pas l’intérêt de l'utiliser.

Posté par Pαlвσlѕку le 18 Jan - 18:47 (2011)
Sphinx a écrit:
Si le système de PSP DS reprend le système que j'ai créé pour 4G+, un retour à la ligne se fait normalement en intégrant " rtn " à l'endroit du saut de ligne Imbécile heureux

A ma connaissance, j'ai fais un copier/coller du système.
J'ai juste modifié l'emplacement du texte.

Posté par quenti77 le 18 Jan - 19:53 (2011)
Bon c'est bien "rtn" qu'il faut mettre le problème c'est qu'il fait que me l'enlever mais pas de retour à la ligne.
Ah oui le script est bien celui de PSP 4G+.

Voici la partie avec le rtn :

def afficher_panneau(text, style = 2, align = 0, color = Color.new(255, 255, 255, 255))
    return if text.type != String or text == ""   
    text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
    text.gsub!(/\\[Pp]\[([0-9]+)\]/) { $string[$1.to_i] }
    text.gsub!(/\\[Nn]\[([0-9]+)\]/) { ($game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "") }
    temp_bitmap = Bitmap.new(1, 1)
    temp_bitmap.font.name = "Pokemon Emerald"
    temp_bitmap.font.size = $fontsize   
    if text.type != String
      text = text.to_s
    end
    if text == ""
      return false
    end
    text = text.split(' ')
    if temp_bitmap.text_size(text[0]).width <= 212
      texte = [text[0]]
      j = 0
    else
      mot = coupure_mots(text[0])
      texte = [mot[0],mot[1]]
      j = 1
    end
    for i in 1...text.size
      if temp_bitmap.text_size(text[i]).width > 212
        mot = coupure_mots(texte[j] + " " + text[i])
        texte[j] = mot[0]
        j += 1
        texte[j] = mot[1]
      elsif temp_bitmap.text_size(texte[j] + " " + text[i]).width > 212
        j += 1
        texte[j] = text[i]
      elsif text[i] == "rtn"
        j += 1
        texte[j] = ""
        next
      elsif texte[j].size == 0
        texte[j] += text[i]
      else
        texte[j] += " " + text[i]
      end
    end
    temp_bitmap.clear
    scene = Afficher_Message.new(texte, style, align, color)   
    scene.main   
  end

Désolé de le mettre ainsi met j'ai un bug au niveau du bbcode

Posté par Sphinx le 19 Jan - 04:33 (2011)
rtn est - normalement - supprimé et remplacé par un "retour à la ligne" (c'est un faux retour à la ligne, puisque chaque ligne est totalement indépendante ^o^)

Posté par quenti77 le 19 Jan - 07:11 (2011)
Alors comment je pourrais faire pour aller à la deuxième ligne dès que j'ai  rtn dans le texte ?

Posté par Sphinx le 19 Jan - 12:50 (2011)
Tout bêtement "rtn rtn"

Tu peux faire autant de "rtn" que tu veux dans ton message ^o^ J'ai choisi cette chaine de caractères parce qu'à l'époque "\n" (saut de ligne dans beaucoup de langages, dont le ruby :p) devait bugger d'une facon ou d'une autre, et donc qu'il me fallait une chaine qu'on a peu de risques de voir utilisé dans un message (sauf à cet usage, bien entendu :p).

En outre, il faut que "rtn" soit un mot à part entière. Ca ne remplace donc pas le rtn de "artnzerk" (euh, et pourquoi vous n'auriez pas ce mot dans vos messages ? 42)

Posté par quenti77 le 27 Jan - 09:21 (2011)
C'est bon sa marche !

Je mais bien rtn avec des espaces maintenant. En fait je voulais recréér les messages que l'on voit dans les panneau (route1 par là, info dresseur),
sauf que il fallait que l'on puisse enlever le panneau des que l'on change de direction. Il me manque la flèche qu'il faut que j'enlève mais pour l'instant je garde.

Merci de votre à tous ! ! !

Posté par Sphinx le 30 Jan - 13:20 (2011)
Condition Si Héros regarde vers Direction
___Afficher Message
Fin

Posté par quenti77 le 8 Fév - 11:26 (2011)
Eu non en fait quand le message apparait pour le faire disparaitre il faut appuyer sur C. Moi maintenant j'appuie sur les fleche directionnel. Deplus les messages doivent-être différents celon le panneau.
Mais tu as raison Sphinx et d'ailleurs c'est ce que j'avais fait

Regardez plutot.
Spoiler




D'ailleurs sa me fait pensé que j'ai carrément oublier d'enlever la flèche !.

Posté par Nuri Yuri le 8 Fév - 17:45 (2011)
Il y a pas de défilement (je me répètes 42)
Est ce que la methode de sphinx prend en charge les couleurs et d'autres choses ? | Edit : j'avais pas lu le script -_- ma question n'est plus à prendre en compte.


De mon coté ce que j'ai coder prend tout ça en compte ... il faudra juste que je fasse un apparition moins brutale de le fenêtre.


Voilà, au fait j'utilise \n pour faire un saut à la ligne on sais jamais que le héros ai un nom bizarre 42

Posté par Sphinx le 10 Fév - 17:38 (2011)
quenti77 a écrit:
Eu non en fait quand le message apparait pour le faire disparaitre il faut appuyer sur C. Moi maintenant j'appuie sur les fleche directionnel. Deplus les messages doivent-être différents celon le panneau.
Mais tu as raison Sphinx et d'ailleurs c'est ce que j'avais fait


Clin d'œil foireux Là faut toucher ailleurs dans le script. Copies / colles le script entier Afficher_Message et crée un Afficher_Panneau.

Ensuite, tu remplaces
Code:
Afficher_Message.new(texte, style, align, color)
par
Code:
Afficher_Panneau.new(texte, style, align, color)

Enfin, faut que tu trouves la ligne où je fais le défilement, et remplacer le
Code:
if Input.trigger?(Input::C)
par
Code:
if Input.trigger?(Input::C) # Si on appuie sur ENTREE
   or Input.trigger?(Input::UP) # Si on appuie sur flèche HAUT
   or Input.trigger?(Input::DOWN) # Si on appuie sur flèche BAS
   or Input.trigger?(Input::LEFT) # Si on appuie sur flèche GAUCHE
   or Input.trigger?(Input::RIGHT) # Si on appuie sur flèche DROITE

ce qui devrait - à priori - faire défiler (et donc disparaitre) le message à afficher ^o^

Posté par quenti77 le 11 Fév - 09:07 (2011)
Sphinx j'ai déjà réussi sa. Regarde mon code :
Code:

# Window_Panneau

class Afficher_Message
 
  def initialize(tab_texte, style = 2, align = 0, color = Color.new(60, 60, 60))
    @tab_texte = tab_texte
    @index = 0
   
    $game_variables[101] = style
   
    @align = align
    @color = color         
  end
 
  def main         
    @button_red = Bouton_Rouge.new
    @dummy = Sprite.new
    if $game_variables[101] == 1
      @dummy.bitmap = RPG::Cache.picture("Messages/info.png")
    elsif $game_variables[101] == 2
      @dummy.bitmap = RPG::Cache.picture("Messages/villes.png")
    elsif $game_variables[101] == 3
      @dummy.bitmap = RPG::Cache.picture("Messages/routes.png")
    else
      @dummy.bitmap = RPG::Cache.picture($MSG)
    end
    @dummy.x = 15
    @dummy.y = 158
    @dummy.z = 200
    @texte = Window_Base.new(0, 132, 250, 100)
    @texte.z = 10999
    @texte.opacity = 0
    @texte.contents = Bitmap.new(608, 112)
    @texte.contents.font.name = "Pokemon Emerald"
    @texte.contents.font.size = $fontsize   
    @arrow = Sprite.new
    @arrow.bitmap = RPG::Cache.picture("arrow_sphinx")
    @arrow.x = 254
    @arrow.y = 186
    @arrow.z = 10000     
    $game_variables[15] = 1
    $game_variables[14] = 2
    update   
    Graphics.transition(40)
    loop do                 
      if @frame != nil
        @frame += 1
        if @frame == 6
          @arrow.y -= 1
        end
        if @frame == 12
          @arrow.y -= 1
        end       
        if @frame == 18
          @arrow.y += 1
        end
        if @frame == 24
          @arrow.y += 1
          @frame = 0
        end       
      else
        @frame = 0
      end           
      Graphics.update
      Input.update     
      @button_red.refresh
      if Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT) or Input.trigger?(Input::DOWN) or Input.trigger?(Input::C) or Input.trigger?(Input::B)
        if @index < (@tab_texte.size - 2)         
          @index += 1
          update
        else         
          break
        end
      end
    end
    Graphics.freeze
    @arrow.dispose
    @dummy.dispose
    @texte.dispose   
    @button_red.dispose
    $game_variables[15] = 0 if not $game_variables[15] == 2
    $game_variables[101] = 0
    Graphics.transition(10)
  end 
 
  def update       
    if $game_variables[101] == 1
      @dummy.bitmap = RPG::Cache.picture("Messages/info.png")
    elsif $game_variables[101] == 2
      @dummy.bitmap = RPG::Cache.picture("Messages/villes.png")
    elsif $game_variables[101] == 3
      @dummy.bitmap = RPG::Cache.picture("Messages/routes.png")
    else
      @dummy.bitmap = RPG::Cache.picture(POKEMON_S::MSG)
    end
    @texte.contents.clear
    @texte.draw_text(13, 8, 212, 32, @tab_texte[@index].to_s, @align, @color)
    @texte.draw_text(13, 24, 212, 32, @tab_texte[@index + 1].to_s, @align, @color)   
    Graphics.transition(1)
  end
 
 
end

class Interpreter
 
  def coupure_mots(mot)
    temp_bitmap2 = Bitmap.new(1, 1)
    temp_bitmap2.font.name = $fontface
    temp_bitmap2.font.size = $fontsize
    for c in 0...mot.size
      if temp_bitmap2.text_size(mot[0..c] + "-").width >= 212
        break
      end
    end
    temp_bitmap2.clear
    return [mot[0...c] + "-","-" + mot[c...mot.size]]
  end
   
  def afficher_panneau(text, style = 2, align = 0, color = Color.new(255, 255, 255, 255))
    return if text.type != String or text == ""   
    text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
    text.gsub!(/\\[Pp]\[([0-9]+)\]/) { $string[$1.to_i] }
    text.gsub!(/\\[Nn]\[([0-9]+)\]/) { ($game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "") }
    temp_bitmap = Bitmap.new(1, 1)
    temp_bitmap.font.name = "Pokemon Emerald"
    temp_bitmap.font.size = $fontsize   
    if text.type != String
      text = text.to_s
    end
    if text == ""
      return false
    end
    text = text.split(' ')
    if temp_bitmap.text_size(text[0]).width <= 212
      texte = [text[0]]
      j = 0
    else
      mot = coupure_mots(text[0])
      texte = [mot[0],mot[1]]
      j = 1
    end
    for i in 1...text.size
      if temp_bitmap.text_size(text[i]).width > 212
        mot = coupure_mots(texte[j] + " " + text[i])
        texte[j] = mot[0]
        j += 1
        texte[j] = mot[1]
      elsif temp_bitmap.text_size(texte[j] + " " + text[i]).width > 212
        j += 1
        texte[j] = text[i]
      elsif text[i] == "rtn"
        j += 1
        texte[j] = ""
        next
      elsif texte[j].size == 0
        texte[j] += text[i]
      else
        texte[j] += " " + text[i]
      end
    end
    temp_bitmap.clear
    scene = Afficher_Message.new(texte, style, align, color)   
    scene.main   
  end
   
end


Je viens de voir ou était

Posté par Sphinx le 11 Fév - 16:56 (2011)
Bravo ^^

Ca marche comme tu le souhaitais ? Imbécile heureux

Posté par quenti77 le 12 Fév - 21:52 (2011)
Oui c'est bon. Merci Sphinx !

C'est pas le nirvana mais au moins sa permet d'afficher les info de la ville, l'aide au dresseur et les directions dans des panneaux différents.