Forums » RGSS

8ª aula: De volta as janelas

    • 683 posts
    2 de junho de 2015 18h29min35s ART

    Anteriormente vimos somente um pouquinho sobre janelas, vamos aprender mais sobre elas... abra o editor no script "Window_Base", veja procure por este texto:

     

    Spoiler 

     

    def text_color(n)case n when0returnColor.new(255,255,255,255)when1returnColor.new(128,128,255,255)when2returnColor.new(255,128,128,255)when3returnColor.new(128,255,128,255)when4returnColor.new(128,255,255,255)when5returnColor.new(255,128,255,255)when6returnColor.new(255,255,128,255)when7returnColor.new(192,192,192,255)else normal_color endend

     

     

    neste pedaço do código definimos as cores dos textos, que podem ser usadas em qualquer script com hierarquia com "Window_Base", (todas as janelas),  lembra de quando falamos de hierarquias na primeira aula ? com estes dados podemos definir as cores dos textos em qualquer janela com este comando:

    self.contents.font.color = normal_color #cor da fonte = normal_color 

     

    com este comando (self.contents.font.color) definimos qual cor sera usada na janela, neste caso a normal_color, existem varias corees que podem ser usadas nas janelas  são elas:

    normal_color (cor branca)

    disabled_color (cinza)

    system_color (azul)

    crisis_color (amarela)

    knockout_color (vermelha)

    este comando é usado na def refhesh, onde se define os textos,  garanto que todas as janelas que você for criar precisara de duas definições: initialize e refresh

    Spoiler 



    classWindow_Qualquer<Window_Basedef initialize # dados Geraisenddef refhesh #dados sobre textosendend

     

     

    em initialize podemos definir vars que começão com @ mas em alguns casos, quando definimos a def precisaremos acresentar () com o nome das vars dentro, veja:

    Spoiler 

     attr_reader :name # name attr_reader :index # cursor positiondef initialize(actor, max_char)#()= nome das vars que criaremos super(0,0,640,128)self.contents =Bitmap.new(width -32, height -32)@actor= actor @name= actor.name @max_char= max_char # Fit name within maximum number of characters name_array =@name.split(//)[[email protected]_char]@name=""for i in0...name_array.size @name+= name_array[i]end@default_name=@name@index= name_array.size refresh update_cursor_rect end

     

     

    Repare que as vars:  @actor e @max_char são declaradas em () na mesma linha que a declare-se a def, mas a outras como @index, que não, mas por quê   :desconfiado: repare que antes da def initialize a isto:

     attr_reader :name # name attr_reader :index # cursor position 

    ai a duas vars (name e index) este tipo de comando é usado principalmente em scripts do tipo game, ele é

    declarado um antes da def initialize, e não esta presente em nenhuma def, e no caso do @default_name é   porque esta var é igual a @name que já foi declarada

     

    Tambem podemos usar a def update que já vimos no caso da Scene, o objetivo é o mesmo: atualizar dados, muitas vezes podemos usar esse método para as janelas

     

    Spoiler 

     

    classWindow_PlayTime<Window_Base#--------------------------------------------------------------------------# * Object Initialization#--------------------------------------------------------------------------def initialize super(0,0,160,96)self.contents =Bitmap.new(width -32, height -32) refresh end#--------------------------------------------------------------------------# * Refresh#--------------------------------------------------------------------------def refresh self.contents.clear self.contents.font.color = system_color self.contents.draw_text(4,0,120,32,"Tiempo de Juego")@total_sec=Graphics.frame_count /Graphics.frame_rate hour =@total_sec/60/60 min =@total_sec/60%60 sec =@total_sec%60 text = sprintf("%02d:%02d:%02d", hour, min, sec)self.contents.font.color = normal_color self.contents.draw_text(4,32,120,32, text,2)end#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update superifGraphics.frame_count /Graphics.frame_rate !=@total_sec refresh endendend  

     Neste caso a update é usada quando Graphics.frame_count / Graphics.frame_rate não é igual a @total_sec, exemplo quando você não jogou nenhuma vez no file o Graphics.frame _ count / Graphics.frame_rate não é igual mas a partir quando você joga é defino que é igual a @total_sec veja o exemplo:

    Spoiler 
    classWindow_PlayTime<Window_Base#--------------------------------------------------------------------------# * Object Initialization#--------------------------------------------------------------------------def initialize [...]end#--------------------------------------------------------------------------# * Refresh#--------------------------------------------------------------------------def refresh self.contents.clear self.contents.font.color = system_color self.contents.draw_text(4,0,120,32,"Tiempo de Juego")@total_sec=Graphics.frame_count /Graphics.frame_rate #definise @total_sec[...]end#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update superifGraphics.frame_count /Graphics.frame_rate !=@total_sec#se Graphics.frame_count / Graphics.frame_rate for diferente a @total_sec refresh#va para refreshendendend  

     

    Botando em pratica

     

    Hoje você precisara de um script com as regras:

     

     

     

    1 declare a class como hierarquia a Window_Base

    crie a def initialize

    coloque:super(80, 80, 480, 300)

    coloque: self.contents = Bitmap.new(width - 32, height - 32)

    finalize a def initialize

    declare a def refresh

    escolha uma cor para (nome:, classe:, level:, arma:, resultados), exemplo:

    Spoiler 
    self.contents.font.color = disabled_color self.contents.draw_text(4,0,64,64,"Nome:")self.contents.font.color = system_color self.contents.draw_text(4,64,64,64,"clase:") 

    finalize o script

     

     

    Seu script devera ficar parecido a este:

    Spoiler 

     

    classWindow_Perfil<Window_Basedef initialize super(80,80,480,300)self.contents =Bitmap.new(width -32, height -32) refresh enddef refresh self.contents.font.color = normal_color #cor da fonte = normal_color self.contents.draw_text(355,0,64,64,"Ash")self.contents.draw_text(355,64,64,64,"Espadachin")self.contents.draw_text(355,128,64,64,"01")self.contents.draw_text(355,192,64,64,"Espada")self.contents.font.color = disabled_color self.contents.draw_text(4,0,64,64,"Nome:")self.contents.font.color = system_color self.contents.draw_text(4,64,64,64,"clase:")self.contents.font.color = crisis_color self.contents.draw_text(4,128,64,64,"level:")self.contents.font.color = knockout_color self.contents.draw_text(4,192,64,64,"arma:")endend

     

    Conclusão

     

    Hoje falamos sobre as janelas, próxima aula faremos um sistema com uma Scene, uma janela e sprites