Sujet n°10616
Posté par Suicune31 le 9 Nov - 22:48 (2011)
Titre : Lag en chargeant le texte avec $data_mapzone
Bonsoir à tous ^^
Je suis en train de finir mon interface et un petit soucis me gêne, quand jutilise cette ligne,

Code:

          draw_text_contour(158, 207, 50, 25, $data_mapzone[$game_map.map_id][1])
le jeu lag tellement, au point qu'il ne sois plus jouable et c'est embêtent x).

c'est pourquoi je vien vous demander votre aide, j'aimerais savoir si il y avais un moiyen de charger le nom de la map mais pas de façon permanente,
et que à chaque changement de map, le texte s'actualise ^^.

Je vous remercie d'avance pour votre aide Clin d'œil foireux

Posté par Sphinx le 9 Nov - 22:49 (2011)
Bonjour,

Que fait ta fonction draw_text_contour (quelle est sa définition) ?

Posté par Suicune31 le 9 Nov - 22:54 (2011)
Je crois mal comprendre ta question mais bon x).

ça fonction est la même chose que draw_texte, il utilise juste un style de texte différent, si tu à déjà jeter un œil sur PSP DS, son interface utilise le draw_text_contour ^^.

Posté par Nuri Yuri le 10 Nov - 12:58 (2011)
Ça lag parce que tu "rafraichis" ton interface à toute les frames (JE VOUS AVEZ DIT LES WINDOW C4EST LE MAL *fuit*)
Dessine ton interface un fois pour toute, si tu dois redessiner des textes plusieurs fois, écris les textes dans un sprite/une window séparé et aux textes que tu dois mettre à jour tu fais :
Code:
contents.fill_rect(x,y,width,height,Constant::C_Trans)
draw_text_contour(x,y,width,height,text,align)

Plutôt que d'effacer le contenu de l'interface et le redessiner à chaque fois, si tu fais ça que pour les textes à mettre à jour ça ne devrai plus laguer.
Pour savoir si il faut changer le texte ou non, mémorise le quelque part et vérifie si il a changé.
Code:
if @text_map != $data_mapzone[$game_map.map_id][1]
  @text_map=$data_mapzone[$game_map.map_id][1]
  contents.fill_rect(158,207,50,25,Constant::C_Trans)
  draw_text_contour(158, 207, 50, 25, $data_mapzone[$game_map.map_id][1])
end

Après c'est peut être à appliquer sur plusieurs choses, je sais pas ce que ton interface fais...

Posté par Sphinx le 11 Nov - 22:51 (2011)
Plutôt que fill_rect(...) je pense que contents.clear (vide le contenu de la Window, ne touche pas à son fond) est plus adaptée (:p ca se voit que tu détestes les windows)

Posté par Nuri Yuri le 12 Nov - 00:40 (2011)
fill_rect c'est pour effacer une zone précise(dans l'objet des textes), pour ne pas avoir à tout redessiner, imagine si à chaque frames tu colle le bitmap, tu écris les 50 texts qui sont là pour des raisons obscures puis tu colle quelques autres bitmaps pour n'avoir mis à jour qu'un seul texte... C'est un peu stupide et ça cause des lags. Le RGSS est lent au niveau des images et compagnie alors il ne faut pas trop lui en demander.
Bon après je sais pas comment fonctionne le script de Suicune ni à quoi il ressemble.

Posté par Suicune31 le 14 Nov - 21:02 (2011)
je ne compte pas dévoilé mon interface maintenant ^^donc je vais donner un exemple de ce que je souhaite obtenir...

Je souhaiterais donc afficher le nom du lieu ou je suis actuellement sur mon l'interface (chose que je sais faire).



Seulement, dès que j'utilise la ligne qui contient le nom de la zone, le jeu lag systématiquement.
Jai même essayer de stocké le nom dans une variable et d'utilisé "draw_text_contour(158, 207, 50, 25, $game_variables[xx].to_s)"
Mais rien y fait, le jeu lag quand même...

Posté par Nuri Yuri le 14 Nov - 21:54 (2011)
Tu dois mal avoir fait ton script...
Code:
#==============================================================================
# ■ Pokemon_Menu
# Pokemon Script Project DS - Palbolsky
# 22/02/10
#-----------------------------------------------------------------------------
# Scène modifiable
#-----------------------------------------------------------------------------
# Interface graphique du menu principal accessible par échap
#-----------------------------------------------------------------------------

class Interface_Echap < Window_Base   
  include POKEMON_S 
 
  def initialize 
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)   
    self.contents.font.name = $fontface   
    self.contents.font.size = $fontsize   
    self.opacity = 0     
    self.z = 21   
    @interface = Sprite.new         
    @interface.x = 13
    @interface.y = 227
    @interface.z = 20       
    text_interface
    apparence       
    refresh
  end     
   
  def dispose
    super     
    @interface.dispose
  end
 
  def apparence   
    if $options[1] == 1 or $options[1] == nil # Vert
      @string = "_vert"     
    elsif $options[1] == 0 # Bleu
      @string = "_bleu"
    elsif $options[1] == 2 # Rouge
      @string = "_rouge"     
    end   
  end 

  def refresh     
    if $pokemon_party.size > 0
      @interface.bitmap = RPG::Cache.picture("Menu Echap/menu echap2" + @string)
    else
      @interface.bitmap = RPG::Cache.picture("Menu Echap/menu echap1" + @string)
    end   
    if $data_pokedex[0] == true
      @interface.bitmap = RPG::Cache.picture("Menu Echap/menu echap3" + @string)   
    end
    if $game_switches[9] == true     
      @interface.bitmap = RPG::Cache.picture("Menu Echap/menu echap" + @string)   
    end 
    if $data_mapzone[$game_map.map_id][1] != @map_name
      @map_name=$data_mapzone[$game_map.map_id][1]
      text_interface
    end
  end   
 
  def text_interface   
    contents.clear
    draw_text_interface(16, 253, 50, 25, "POKéDEX", 1)
    draw_text_interface(16, 293, 50, 25, "POKéMON", 1)
    draw_text_interface(16, 333, 50, 25, "SAC", 1)
    draw_text_interface(1, 373, 80, 25, "POKéMATOS", 1)
    draw_text_interface(86, 253, 70, 25, Player.name, 1)
    draw_text_interface(96, 293, 50, 25, "SAUVER", 1)
    draw_text_interface(96, 333, 50, 25, "OPTIONS", 1)
    draw_text_contour(158, 207, 50, 25, @map_name.to_s) 
  end 
 
end

Ça fonctionne et le jeu reste dans un niveau de FPS normal.

Posté par Suicune31 le 15 Nov - 12:51 (2011)
A merci Yurii Imbécile heureux ça fonctionne mieux comme ça ^^

Mais j'ai un dernier soucis, la longueur des textes varient beaucoup et du coup ils sont plus centré...
Il y a un moyen de centré le texte afin qu'il sois toujours centré dans mon rectangle ?





Posté par Nuri Yuri le 15 Nov - 14:17 (2011)
Code:
draw_text_contour(px_rect, py_rect, longueur_rect, hauteur_rect, @map_name.to_s,1)

Normalement comme ça ça devrait aller, mais il se peut qu'il y a des textes très grands donc il faut prévoir ce qu'il faut...