Sujet n°13501
Posté par Zohran le 10 Jan - 14:36 (2014)
Titre : Message Style Pokémon RF/VF
Bonjour, voilà, en ce moment je m'amuse à coder un SK pokémon reproduisant intégralement les systèmes de pokémon rouge feu et vert feuille.
Je recode une BDD de script de A à Z.

Je tenais à vous faire malgré tout profiter de ce script. Vous pouvez le mettre n'importe où, il n'utilise aucun script extérieur de RMXP.
Voici le pack de ressource nécessaire: https://www.mediafire.com/?l9nl5l509u5hnn2 (2 fichiers PNG à mettre dans le dossier windowskin + la police d'écriture de pokémon RF/VF à installer)

SCREEN depuis ma BDD vide



Code:
class Message
 
  def initialize(texte1 = "", texte2 = "", couleur = 0, suivant = false)
    @texte1 = texte1
    @texte2 = texte2
    @couleur = couleur
    @suivant = suivant
   
    @noir = Color.new(96, 96, 96, 255)
    @bleu = Color.new(48, 80, 200, 255)
    @rouge = Color.new(224, 8, 8, 255)
    @gris = Color.new(208, 208, 200, 255)
   
    @fond = Sprite.new
    @fond.bitmap = Bitmap.new("Graphics/Windowskins/Dialogue")
    @fond.x = 5
    @fond.y = 115
    @fond.z = 0
   
    @fenetre = Sprite.new
    @fenetre.bitmap = Bitmap.new(640, 480)
    @fenetre.bitmap.font.name = "Power Red and Green"
    @fenetre.bitmap.font.size = 14
    case @couleur
    when 0
      @fenetre.bitmap.font.color = @noir
    when 1
      @fenetre.bitmap.font.color = @bleu
    when 2
      @fenetre.bitmap.font.color = @rouge
    end
    @fenetre.bitmap.draw_text(16, 121, 208, 14, @texte1)
    @fenetre.bitmap.draw_text(16, 123 + 14, 208, 14, @texte2)
    @fenetre.z = 2
   
    @ombre = Sprite.new
    @ombre.bitmap = Bitmap.new(640, 480)
    @ombre.bitmap.font.name = "Power Red and Green"
    @ombre.bitmap.font.size = 14
    @ombre.bitmap.font.color = @gris
    @ombre.bitmap.draw_text(17, 122, 208, 14, @texte1)
    @ombre.bitmap.draw_text(17, 124 + 14, 208, 14, @texte2)
    @ombre.z = 1
   
    if @suivant == true
      @fleche = Sprite.new
      @fleche.bitmap = Bitmap.new("Graphics/Windowskins/Flèche")
      @fleche.x = 16 + @fenetre.bitmap.text_size(@texte2).width + 3
      @fleche.y = 139
      @fleche.z = 2
    end
   
  end
 
  def supprimer
    @fond.dispose
    @ombre.dispose
    @fenetre.dispose
    @fleche.dispose if @fleche != nil
  end
 
  def maj_fleche(i)
    case i
    when 0
      @fleche.y = 139
    when 6
      @fleche.y = 140
    when 12
      @fleche.y = 141
    when 18
      @fleche.y = 140
    when 24
      @fleche.y = 139
    end
  end
 
end


Le script est brut pour l'instant car ensuite il sera appelé par plusieurs autres scripts que j'aurais codé, MAIS il est simple à utiliser malgré tout.

Si vous l'appelez depuis un event, appelez-le de cette manière, tout en mettant ATTENDRE 1 frame après cette commande:

Code:
Graphics.freeze
 
  message = Message.new("Je  suis  complètement  épuisée.", "Tu  aurais  de  l'eau  s'il  te  plaît?", 2, true)
 
  i = 0
 
  Graphics.transition(20)
 
  loop do
   
    if i > 24
      i = 0
    end
 
    i += 1
   
    Graphics.update
    Input.update
    message.maj_fleche(i)
    if Input.trigger?(Input::C)
      break
    end
  end
 
  message.supprimer


Les arguments: Message.new(1ère ligne de texte, 2ème ligne de texte, couleur, si un autre message suit)

Si vous ne voulez pas mettre de texte à la 2ème ligne, mettez "".
Pour les couleurs, il y en a 3, comme dans RF/VF: 0-noir, 1-bleu, 2-rouge.
Le dernier argument: mettre true ou false. C'est pour dire si un message va suivre après celui-ci. Si c'est le cas, la flèche sera présente sur le message, montrant que la boîte de dialogue n'est pas terminée (comme dans RF/VF).

La boîte de dialogue sera positionnée en haut à droite car elle est conçu pour une résolution GBA à la base, à vous d'adapter les X et Y du script

Posté par Nuri Yuri le 10 Jan - 15:56 (2014)
C'est un peu léger et ça ne remplis pas vraiment la fonction prévu. Un message devrait s'écrire de cette façon :
«Sal» => «Salut » => «Salut toi» => «Salut toi ! » (En fonction de la vitesse).
Enfin pourquoi pas sinon, je ne comprend pas pourquoi tu as choisi d'initialiser deux bitmaps de 640x480 alors que tu pouvais faire avec un de la taille de la boite.

Posté par Zohran le 10 Jan - 17:06 (2014)
Yuri a écrit:
C'est un peu léger et ça ne remplis pas vraiment la fonction prévu. Un message devrait s'écrire de cette façon :
«Sal» => «Salut » => «Salut toi» => «Salut toi ! » (En fonction de la vitesse).
Enfin pourquoi pas sinon, je ne comprend pas pourquoi tu as choisi d'initialiser deux bitmaps de 640x480 alors que tu pouvais faire avec un de la taille de la boite.


Oui c'est léger, ce n'est que provisoire, par contre, tu pourrais peut-être me conseiller, si j'ai créée 2 bitmaps, ça veut dire que j'ai pas bien compris complètement comment me servir de cette classe alors, comment aurais-tu procédé?

Idem pour la vitesse, c'est en jouant sur les dimensions du bitmap?

Posté par Nuri Yuri le 10 Jan - 17:15 (2014)
Pour ma part, j'en ai crée un, et l'ombre, je la dessine avant de dessiner le texte clair. Ainsi elle sera forcément derrière le message clair donc j'économise un sprite et un bitmap soit environ 1.171875 Mo de RAM dans ton cas précis. (Imagines que tu as un joueur sur Windows XP avec 256Mo de RAM et que tu fais ça sans cesse, il va vite finir avec un RGSSError Can't create Bitmap.)
D'où l'intérêt d'ailleurs de créer un bitmap de la taille de la boite de message : il pèsera 9.43359375 Ko au lieu de 1.171875 Mo soit quasiment une réduction de 127 fois et ce n'est pas négligeable.

Posté par Mack le 10 Jan - 17:20 (2014)
Bah, en faite un bitmap c'est comme une feuille transparente, avec certain outils tu peux y dessiner dessus.
Les lignes du types :
Code:
bitmap = Bitmap.new("Graphics/Windowskins/Flèche")

Permettent de transformer ta feuille en cette image.
( Donc La feuille change de taille, puis se colorie toute seule. )
Tandis que :
Code:
bitmap = Bitmap.new(640,480)

Permet de créer ne feuille transparente de taille 640,480.

Pour dessiner une image sur une feuille tu peux utiliser :
Code:
bitmap.blt(x , y, bitmap, src_rect)

bitmap c'est un autre bitmap ( donc pour toi ça serait ta flèche, ou ton fond )
Et src_rect correspond à la partie du bitmap que tu veux dessiner.

Par exemple pour dessiner le fond, écrire du texte, puis dessiner la flèche :
Code:
dbitmap = RPG::Cache.windowskin("Dialogue")
    cw = dbitmap.width
    ch = dbitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    bitmap.blt(x,y, dbitmap, src_rect)
   
   
    bitmap.draw_text(17, 122, 208, 14, @texte1)
   
    fbitmap = RPG::Cache.windowskin("Flèche")
    cw = fbitmap.width
    ch = fbitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    bitmap.blt(x,y, fbitmap, src_rect)


Si tu comprends pas mieux, j'te feras un vrai exemple ^^.

Posté par Nuri Yuri le 10 Jan - 18:20 (2014)
Je déconseille l'utilisation de Bitmap#blt si ce n'est pas dans une but de dessin compliqué de bitmap ou de restructuration à partir d'un "Tileset" (tiles de 8x8 par exemple). C'est une procédure assez lente si tu as déjà l'image tu utilises un Sprite et si besoins Sprite#src_rect.