Anteriormente vimos somente um pouquinho sobre janelas, vamos aprender mais sobre elas... abra o editor no script "Window_Base", veja procure por este texto:
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
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:
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(//)[0...@max_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ê 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
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:
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
2 crie a def initialize
3 coloque:super(80, 80, 480, 300)
4 coloque: self.contents = Bitmap.new(width - 32, height - 32)
5 finalize a def initialize
6 declare a def refresh
7 escolha uma cor para (nome:, classe:, level:, arma:, resultados), exemplo:
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:")
8 finalize o script
Seu script devera ficar parecido a este:
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