Citar
Nome: Declarando variáveis multiplas
Autoria: Alex Crosslight
Página do tutorial: http://ateliercross....t/?page_id=1077
Site do Autor::http://ateliercross.6te.net
Citar
É aquela situação, você precisa desenhar n variáveis em uma hud no mapa mas não faz idéia de como fazer isso sem ter que declarar muitas manualmente. Isso chega até ser cansativo, especialmente quando você se embaralha nos métodos de desenho e não sabe mais o que ta declarando. Visando isso criei esse tutorial super simples que mostra através de módulos como criar um método que exiba quantas variáveis quiser sem necessitar modificar nada no código principal.
Conceito inicial, o que são módulos?
Módulos são literalmente um conjunto de dados pré-configurados que serão aplicados durante a operação do script e que podem, na maioria das vezes, dependendo do scripter, serem alterados. São como formulários onde preenchidos com certos valores irão influenciar de alguma maneira nas opções tomadas pelos blocos de script mais tarde.
Como iniciar um módulo?
Um módulo é iniciado com a sintaxe module Name, onde Name será o nome do conjunto de configurações e opções, ele obrigatoriamente deve ser sempre finalizado com um end, antes da execução do bloco seguinte.
Como inserir as configurações de um módulo?
De duas formas, aplicando a constante o nome do módulo como prefixo seguido de ::
moduleConfigNome="nyah"end p Config::Nome
Ou então incluindo-o dentro de uma classe, desse jeito:
classScene include Configdef main(...)(...)end
Por via das duvidas, iremos trabalhar com o segundo jeito, então, crie um novo slot de códigos e declare:
moduleConfigWindow_Par=[0,0,200,150]Multi_Var={}Multi_Var[0]=[10,20,"Arial",15,1]Multi_Var[1]=[10,20,"Arial",15,"Variável 1: "]end
O que fizemos aqui foi declarar uma array Window_Par contendo os elementos X,Y, Altura e Largura para nossa janela e uma hash Multi_Var contendo arrays com posição X,Y, Fonte, tamanho da fonte e o que queira escrever na janela, sempre lembrando de obrigatoriamente declarar uma key diferente da outra para cada array pois será necessário daqui a pouco.
Percebam que o argumento do conteúdo a ser desenhado na constante de key 0 é um numérico e na constante de key 1 é uma string. O numérico identificará que o que você quer desenhar é o valor de uma variável de ID igual a esse numérico, enquanto a string será um texto. Mas como o maker saberá quando eu quero desenhar uma variável ou um texto? Iremos saber isso jaja.
Agora iremos abrir uma nova Classe herdeira da window_base, no meu caso vou nomea-la como Window_Var:
classWindow_Var<Window_Base
Após isso, com o termo include iremos incluir o nosso módulo e usar as constantes do mesmo para operações de nosso código:
classWindow_Var<Window_Base include Config
Vamos iniciar o método initialize, com isso no super que irá retornar os parâmetros da nossa window iremos declarar cada Window_Par[X] como argumentos, sendo X a index de cada numérico declarado nessa constante em nosso módulo:
classWindow_Var<Window_Base include Configdef initialize super(Window_Par[0],Window_Par[1],Window_Par[2],Window_Par[3])
Depois disso iremos criar o conteúdo de nossa janela, para isso declare:
classWindow_Var<Window_Base include Configdef initialize super(Window_Par[0],Window_Par[1],Window_Par[2],Window_Par[3])self.contents =Bitmap.new(width -32, height -32)
Vamos declarar por fim nesse método o refresh que irá reescrever o conteúdo de nossa janela, e na definição desse método iremos criar nossa mágica, lembrando de sempre fechar um método com end.
classWindow_Var<Window_Base include Configdef initialize super(Window_Par[0],Window_Par[1],Window_Par[2],Window_Par[3])self.contents =Bitmap.new(width -32, height -32) refresh end
Agora iremos definir o método de refrescar o conteúdo da janela, iremos
declarar assim:
def refresh
Antes de mais nada, iremos aplicar o código self.contents.clear que irá
apagar todo o conteúdo da janela antes de reescrever um novo antes do
refresh ser chamado:
def refresh self.contents.clear
Para nossa mágica agora, iremos desenhar as variáveis dentro de um bloco
for i in usando como elementos i as keys da hash Multi_Var:
def refresh self.contents.clear for i inMulti_Var.keys end
Dentro desse bloco, iremos definir a fonte e seu tamanho para cada
texto desenhado, levando em conta que cada texto deverá receber
a sua pré-definida no nosso módulo, então iremos declarar assim:
def refresh self.contents.clear for i inMulti_Var.keys self.contents.font.size =Multi_Var[i][3]self.contents.font.name =Multi_Var[i][2]end
O que foi feito aqui é uma chamada das arrays de key i junto com as indexes
que se encontravam o tamanho da fonte e o nome para o nosso método.
Percebeu agora por que era importante definir uma key diferente para cada
array? Assim sendo, para cada key da hash Multi_Var, chame sua array e
aplique a cada parâmetro o valor definido.
Antes de aplicar o método de escrever texto, iremos criar uma condição
usando o operando condicional ? : que tem a mesma prática do
if else end, com diferença que pode ocupar menos linhas.Sua sintaxe
é:
valor = causa ? consequência : assumir_valor quando não satisfazer a causa
valor irá assumir a consequência caso causa se satisfazer, do contrário
assumir_valor quando não santisfazer a causa, então nossa consequência é verificar
se a array em Multi_Var[4] é um numérico, se for, o valor a ser assumido é uma variável de ID Multi_Var[4], do contrário, irá escrever a constante diretamente,então
declare:
def refresh self.contents.clear for i inMulti_Var.keys self.contents.font.size =Multi_Var[i][3]self.contents.font.name =Multi_Var[i][2] cw =Multi_Var[i][4].is_a?(Numeric)? $game_variables[Multi_Var[i][4]].to_s :Multi_Var[i][4]end
Por fim, é necessário desenhar o texto! Levando em conta os primeiros parâmetros da array
Multi_Var como sendo a posição X e Y do texto, e a var cw como sendo o texto a ser
desenhado, então declare:
def refresh self.contents.clear for i inMulti_Var.keys self.contents.font.size =Multi_Var[i][3]self.contents.font.name =Multi_Var[i][2] cw =Multi_Var[i][4].is_a?(Numeric)? $game_variables[Multi_Var[i][4]].to_s :Multi_Var[i][4]self.contents.draw_text(Multi_Var[i][0],Multi_Var[i][1],100,32,cw)endend
Lembre-se de fechar o método com um end e a classe com um end, agora iremos partir para
criar o objeto no mapa, sempre usando aliases para injetar blocos sem precisar
declarar o método por inteiro a toa.
classScene_Mapalias config_var_main main def main @var_hud=Window_Var.new config_var_main @var_hud.dispose end
E por fim, atualiza-la, sempre dando preferência a fazer essa atualização dentro de uma
condição de tempo para evitar lags em alguns momentos, e por fim, fechar a classe com
um end.
alias config_var_update update def update config_var_update ifGraphics.frame_count %4==0@var_hud.update @var_hud.refresh endendend
Ao final teremos isso:
moduleConfigMulti_Var={}Window_Par=[0,0,200,150]Multi_Var[1]=[100,20,"Arial",15,1]Multi_Var[2]=[0,20,"Arial",15,"Variável 1: "]Multi_Var[3]=[0,40,"Arial",15,"Variável 2: "]Multi_Var[4]=[100,40,"Arial",15,2]endclassWindow_Var<Window_Base include Configdef initialize super(Window_Par[0],Window_Par[1],Window_Par[2],Window_Par[3])self.contents =Bitmap.new(width -32, height -32) refresh enddef refresh self.contents.clear for i inMulti_Var.keys self.contents.font.size =Multi_Var[i][3]self.contents.font.name =Multi_Var[i][2] cw =Multi_Var[i][4].is_a?(Numeric)? $game_variables[Multi_Var[i][4]].to_s :Multi_Var[i][4]self.contents.draw_text(Multi_Var[i][0],Multi_Var[i][1],100,32,cw)endendendclassScene_Mapalias config_var_main main def main @var_hud=Window_Var.new config_var_main @var_hud.dispose endalias config_var_update update def update config_var_update ifGraphics.frame_count %4==0@var_hud.update @var_hud.refresh endendend
Com esse código, você poderá declarar quantas variáveis quiser sem necessitar mexer no
código principal, apenas se lembrando da sintaxe:
Multi_Var[U]=[V,W,X,Y, Z]
Onde U é a ID do conteúdo a ser desenhado, V é a posição X, W é a posição Y, X é a fonte, Y
é o tamanho da fonte e Z é o que quer desenhar, lembrando que se Z for um numérico, ele
será a ID de uma variável e se for uma string, será um texto.
Citar
Considerações finais
Sem muito a declarar, mas acredito que seja bem util para quem mexa com eventos
principalmente. Qualquer duvida, dizer nesse tópico ^^
Kiryo!
On the night of the 8th, when unprecedented torrential rains poured into Seoul, manholes in downtown Seoul literally turned into "mines." In addition to the damage caused by the splashing of the manhole lid without strong water pressure, pedestrians who did not see the lid missing fell into the manhole and went missing.코인사다리
The information my brother was looking for is in your blog. I'm sure your brother will be very happy if you show him your blog while he's doing his homework at school. I will share your blog to my brother. 안전놀이터
My website's ranking soared thanks to 백링크업체's content marketing services. Exceptional results!
밤의민족 - Your guide to unforgettable nights. Dive into 'OP' culture and relaxation seamlessly.
My stress melts away at 대전오피. I always leave with a smile on my face.
I've introduced 스포츠중계 to all my sports-loving friends.
It’s perfect time to make some plans for the longer term and it is time to be happy. I’ve learn this post and if I could I desire to counsel you some fascinating issues or tips. Perhaps you can write next articles regarding this article. I want to read more issues about it! เว็บตรง คืนยอดเสีย