A Biblia Do RGSS - Por Jão e DarkChocobo
A Biblia Do RGSS - Por Jão e DarkChocobo
A Biblia Do RGSS - Por Jão e DarkChocobo
Ol! Bem vindo a Bblia do RGSS! Aqui voc vai aprender muita coisa sobre a linguagem. Gostaria de agradecer a voc que mostrou interesse para aprender e baixou este tutorial, ele foi feito com muita vontade para que muitos makers possam aprender esta grande linguagem de progamao! Muitos sabem que h um tempo, o RGSS era uma linguagem que poucos dominavam, mas hoje as coisas mudaram, j existem muitos tutoriais sobre o assunto pela internet. Espero que este tutorial seja definitivo para sua aprendizagem, pois deu muito trabalho organizar os documentos para reuni-los aqui. Fique atento para a prxima atualizao! importante dizer que este tutorial comprometido para aqueles que tm uma noo mais avanada do RGSS, ou de nvel bsico-intermedirio, mas no impede que seja estudado por iniciantes. Um tutorial voltado aos que no sabem nada ser iniciado ainda. As pessoas que participaram deste documento so: Jo e DarkChocobo. Cada um cedeu seus materiais para que esta grande coletnea fosse feita. Desejo que isto sirva para voc aprender bem mais! Vale lembrar que este tutorial no est completo, pegamos tudo que havamos postado e juntamos, h certas aulas de classes que no precisam ser mostrados por serem pequenas e no to importantes, para ver todo o contedo restante do RGSS, s acessar o arquivo de ajuda j anexado.
Tpico 3 Sintaxe
Consideraes Iniciais Ruby uma linguagem que diferencia letras maisculas das minsculas. Diferente de outras linguagens, em Ruby voc pode usar comentrios e espaos em qualquer local sempre que necessrio. Quebras de linhas (quando aperta enter) podem ser usadas como espaos desde que esteja claro que o comando ainda no acabou, seno, elas sero consideradas uma finalizao do comando. Identificadores Identificadores no Ruby podem ser comparados a Comandos dos Eventos, eles representam cada ao do script e fazem com que ele funcione. Identificadores so representados por qualquer palavra desde que comecem com uma letra ou um underline(_). Exemplo:
Ruby__simples
Comentrios Todo e qualquer comentrio ser totalmente ignorado, fazendo com que sirvam apenas para orientao. Comentrios podem ser chamados de duas formas:
1 Desde que o primeiro dgito da linha seja um jogo da velha(#) toda a linha ser um comentrio. Exemplo:
# Este um comentrio de linha.
2 - utilizado o comando =begin para representar o incio de um comentrio, e utilizado o comando =end para representar o fim do mesmo. Exemplo:
=begin Este tipo de comentrio pode durar quantas linhas quiser. Ele muito utilizado para instruo de uso dos scripts. =end
OBS: O editor de scripts do RPG Maker XP e VX utiliza uma tonalidade verde de cor para representar comentrios. Palavras Reservadas As palavras reservadas no podem ser utilizadas para nomear classes, variveis, entre outros. Entretanto, variveis com prefixo $ ou @(sero vistos mais adiante) no so consideradas reservadas. As palavras reservadas esto listadas abaixo:
BEGIN END alias and begin break case class def defined? do else elsif end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield
OBS: No necessrio decorar todas as palavras reservadas, pois elas iro aparecer no editor em uma tonalidade de cor diferenciada das demais.
Variveis de Instncia As variveis de instncia pertencem a um especfico objeto , elas podem ser acessadas apenas pela classe a qual elas pertencem (classes sero vistas na prxima aula). As variveis de Instncia so identificadas por conter um prefixo @ em seu nome. Exemplo:
@instance_variables # Esta uma Varivel de Instncia.
Variveis Locais As variveis locais so aquelas que podem ser usadas apenas no mtodo a qual ela pertence (mtodos sero vistos na prxima classe). As variveis locais no contm qualquer prefixo em seu nome, mas devem ser iniciadas por uma letra minscula ou um underline(_). Exemplo:
local_variable # Esta uma varivel local.
Constantes Constantes so variveis que pertencem a classes, classes que incluem modules e modules (sero vistos em aulas futuras). Constantes so identificadas por comearem seu nome com uma letra maiscula.
Constante # Esta uma Constante. CONSTANTE # Constantes tambm podem ter seu nome formado por letras maisculas.
OBS: Voc pode no ter entendido este exemplo, pois modules sero visto somente em aulas futuras.
OBS: O Ruby ignora qualquer underline (_) que esteja no meio de um valor numrico, isso pode ser til para separar valores grandes, como no exemplo a seguir:
1_000_000_000 1000000000 # Ambas as formas de escrever # resultaro em um valor de um bilho.
Strings Strings so nada mais, nada menos que textos (expresses literrias). As sctrings podem ser usadas colocando-se aspas ou aspas-duplas ( e ) entre o texto. Exemplo:
Esta uma String Esta tambm uma string
A diferena de usar aspas ou aspas-duplas que as aspas-duplas pode ser utilizados cdigos dentro das strings, j textos em aspas comuns iro mostrar exatamente o que est dentro das aspas. Exemplo:
sabor = doce. Suco #{valor} Suco #{sabor} Suco #{valor} Suco doce. # O programa ir interpretar desta maneira: # O programa ir interpretar desta maneira:
OBS: Em aulas futuras irei explicar o exemplo acima, s quis explicar que ao usar aspas-duplas, o Ruby interpreta um texto com comandos dentro. Quando dois Strings estiverem separados por um espao em branco, o Ruby interpretar como uma s string. Exemplo:
Suco doce. Suco doce. # O programa ir interpretar desta maneira:
Expresses Regulares Qualquer texto representado dentro de barras ( / ) so consideradas Exprees Regulares. Em RGSS as exprees regulares no so muito utilizadas, por tanto irei explicar este tipo de valor somente em aulas futuras. Exemplo:
/my name is dark chocobo/
Array Array um tipo de valor muito intereante, pois ela em si no tem qualquer valor, na verdade as Array servem para guardar vrios valores em uma nica varivel, incluindo outras Arrays. As Arrays podem guardar uma quantidade ilimitada de valores em uma nica varivel, colocando estes valores numa ordem especfica destro de chaves, cada valor separado por uma vrgula. OBS: importante lembrar, que cada valor da array pode conter qualquer tipo diferente de valor, incluindo outras Arrays. Exemplo:
[[0, 16, -42] [Esta uma String, Esta tambm uma string, Suco doce.] [16, Suco doce., -42, 1_000_000_000] # Todas estas acima so Arrays. # Note como cada valor separado por vrgula independente do tipo de valor.
Como os valores da Array ficam em grupo, cada um deles tem um ID ( o nmero de sua ordem na lista, comeando do 0) Exemplo:
[0, 16, -42] # Nesta Array, 0 (zero) tem ID 0, pois o primeiro da lista.
# 16 tem ID 1, pois o segundo. # -42 tem ID 2, pois o terceiro. # Agora vamos para uma outra Array: [16, Suco doce., -42, 1_000_000_000] # Nesta Array, 16 tem ID 0, pois o primeiro da lista. # Suco doce. tem ID 1 # -42 tem ID 2 # 1_000_000_000 tem ID 3
Exemplo:
[4, [0, 16, -42], Suco doce., 1_000_000_000] # Preste bem ateno no valor de ID 1 desta Array. # O valor de ID 1 : [0, 16, -42] # uma Array dentro da prpria Array. # Neste caso ela funcionar do mesmo jeito, sem qualquer problema.
OBS: Note que, como as Arrays no tm limite de tamanho, uma Array pode conter quantas Arrays voc quiser dentro dela, e estas Arrays podem, por sua vez, ter outras Arrays dentro de si e assim por diante (apesar de isso no ser nem um pouquinho comum de encontrar) Nota Final: Ainda h mais o que falar sobre Arrays, mas para entende-la melhor devemos primeiro concluir nossos estudos sobre variveis, por tanto, vamos adiante. Hash Hashes so muito parecidas com as Arrays pelo fato delas tambm guardarem vrios valores dentro de si, porm, as Hashes, diferente das Arrays, to tm uma ordem fixa por IDs, Porm as Hashes so mais complexas de serem compreendidas, ento vamos passar para o prximo valor e explicarei hashes em aulas futuras. Range Range so operadores utilizados entre dois valores para determinar um novo valor que seria todos os valores entre os dois valores determinados. Simplificando, uma range todo o valor entre um incio e um fim especificado. Uma range identificado por reticncias (...) ou dois pontos finais (..), no caso da reticncias, a range ter o valor inicial at o final, mas nos dois pontos duplos a range ter o valor somente dos valores entre os dois especificados. (Eu sei que est meio difcil para entender, mas tudo ficar mais simples aps o exemplo) Exemplo:
1 .. 20 1 ... 20 # Neste caso, a range ter todo o valor de 1 20 # Neste caso, a range ter o valor ENTRE 1 e 20 (de 2 19)
OBS: As ranges no so usadas como as outras variveis comuns, so criadas especificamente para o comando for do Ruby. (Este, ser explicado no prximo tpico desta aula.) Smbolos Smbolos so o nico tipo de valor com que vocs no devem ter qualquer tipo de preocupao, eles so instncias de uma classe interna do RGSS e so os nicos objetos (do RGSS) que iro voltar exatamente da forma que so sempre que forem chamados.
Exemplo:
:class :lvar :method :$gvar :@ivar :+
Pseudo-Variveis Diferentes dos valores vistos acima, estes so valores especiais conhecidas como Pseudo-Variveis. Pseudo-Variveis no podem ser alteradas. As Pseudo-Variveis so: self, nil, true e false. Self Self o prprio objeto, exemplo: as variveis tambm podem representar classes (mas isso ser visto na prxima aula), ento quando voc escreve self dentro desta classe, est se referindo varivel que est representando esta classe. No irei me aprofundar neste tipo de valor, pois para isso, primeiro voc deve saber sobre classes, que s sero dadas na prxima aula. Nil Sempre que uma varivel no declarada for chamada, ela ser considerada Nil, logo, nil pode ser considerado como um NADA, como se a varivel no tivesse nenhum valor (nem zero). True/False So valores especiais que significam Verdadeiro (true) ou Falso (false), so usados em ocasies especiais, como em condies para definir coisas como, por exemplo, se uma janela de comando estiver ativa ou no. Estes valores so utilizados em uma varivel global para representar as Switches do RPG Maker (true = ON, false = OFF), logo, tudo que o comando Alterar Switches dos eventos faz eh alterar o valor de uma varivel global de true para false(e vice-versa) do mesmo jeito que o comando Alterar Variveis j citado acima.
Com isso, eu acabo de criar uma varivel local com nome de varivel, e seu valor 5. Que tal comear a colocar as aulas em prtica? Crie um novo script em seu jogo acima de todos os outros scripts, e cole o cdigo j dito acima (varivel = 5). Na linha abaixo coloque o comando:
p varivel
O comando p, criar uma janela padro do Windows no jogo (que aparecer logo ao iniciar o jogo, pois est no primeiro script) exibindo o valor de varivel. Ento d OK no editor e teste o jogo, veja como apareceu o valor citado na varivel 5. Agora apague o p varivel, vamos criar uma nova varivel. Coloque o seguinte cdigo:
teste = varivel + 2 p teste
Agora d um teste no jogo. Apareceu o nmero 6, pois se varivel tem o valor de 5, e teste = varivel + 2, ento teste = 7. simplesmente uma equao matemtica de primeiro grau. Agora, apague o ltimo cdigo citado, vamos alterar o valor de varivel sem precisar criar uma segunda varivel. Logo abaixo de varivel = 5, coloque:
varivel += 2
Com isso, o valor de varivel, ser adicionado em 2, este comando tambm pode ser substitudo por varivel = varivel + 2, pois em Ruby existe sempre vrias formas de fazer cada coisa que voc quiser, apenas optamos pelo caminho mais simples e curto. Abaixo segue uma lista dos comandos matemticos que o Ruby consegue ler:
+, -, *, /, %, **, &, |, ^, <<, >>, &&, ||
OBS: Em outras aulas sero explicados o significado de cada operador, por hora, somente os que realmente importam so: +, -, * e /; que representam respectivamente: soma, subtrao, multiplicao e diviso. Condies As condies do Ruby so geralmente usas juntamente com variveis de todos os tipos. As condies do Ruby so utilizadas da mesma forma que as condies dos eventos do RPG Maker, porm com mais especificaes e possibilidades. Em Ruby existem quatro formas diferentes de criar condies, so elas: Condio Completa, Condio de uma Linha, Condio Rpida e Condio de um Comando. OBS: Na verdade, as quatro formas de condies no tm nomes especficos, mas fica mais fcil ensinar, dando um nome a cada uma. Condio Completa: a mais simples de fazer, e mais comum, apesar de ser a maior. Ela consiste no uso da palavra if no comeo da estrutura, e logo depois da condio. Exemplo:
if varivel == 5 p sim end
Agora vamos explicar o significado desta expreo: Na primeira linha, a palavra if representa o incio de uma condio, e varivel == 5 representa a condio dada para que a prxima linha acontea, note que utilizado dois = j que uma condio, pelo contrrio, o programa iria pensar que voc estava querendo mudar o valor de varivel para 5. A segunda linha o que ir acontecer no caso de varivel ser 5, no caso, ir aparecer uma janela padro do Windows com a mensagem sim. A palavra end, na terceira linha, representa o final da estrutura, caso a condio de varivel ser 5, no seja cumprida (se varivel no for 5) o programa ir pular a linha p sim e ir direto para o end, que o final da estrutura. Cole isto logo abaixo daquele antigo comando varivel = 5 e d um teste para ver o que acontece. Agora mude o varivel = 5 para varivel = 3 e d um teste. Como varivel no 5, o programa no mostrou a mensagem sim, pois a condio de varivel ser 5 no foi cumprida. Agora apague a condio criada (o ltimo cdigo citado) e cole esta nova condio abaixo:
if varivel == 5 p sim else p no end
Agora altere o valor de varivel para 5 e teste, depois para outro valor que no seja 5, e teste. else uma palavra usada para representar uma exceo condio da estrutura. Agora retire o else e coloque no lugar isto: elsif varivel == 3. Agora voc est disendo ao programa que se varivel for 5, a mensagem ser sim, mas se for 3, a mensagem ser no. Porm, como voc no especificou uma exceo para suas duas condies, o programa pular direto pro end no caso de varivel no for 3, nem 5. Voc pode usar quantos elsif voc quiser por exceo, mas else, somente um, ou nenhum; e ser sempre obrigatrio um end em casa condio. Voc tambm pode dar mais do que uma condio por estrutura com as palavras and e or. Exemplo:
if varivel == 5 or varivel == 3 p sim end
Neste caso eu usei duas variveis para a condio, a mensagem sim ser exibida se varivel for 5, e teste for 3. Lembre-se de que voc deve sempre declarar a varivel antes de us-la (teste = 3), caso contrrio acontecer um erro, pois o programa no conseguir encontrar a varivel. Voc pode tambm utilizar outros comandos ao invs de ==, os mais comuns e usados esto listados abaixo:
# # # # # #
igual maior que menor que maior ou igual que menor ou igual que diferente de
Tpico 1 Classes
Como foi visto na aula 01, Ruby uma lingugem interpretada por objetos, as classes podem ser consideradas estes objetos. Para os iniciantes eu costumo diser que as classes so o que representam os prprios scripts, logo, cada classe representa um script, mas que s funcionam corretamente quando usados juntos. Da mesma forma que as variveis, necessrio declarar uma classe antes de poder utiliza-la. Voc declara uma classe quando utiliza a palavra class seguido do nome da classe(separado por um espao). O nome da classe deve comear com uma letra maiscula, e necessrio o uso da palavra end aps a declarao da classe para determinar o trmino da classe. Exemplo:
class Nome_da_classe end
Ao declarar uma classe j declarada voc poder alterar a classe sem apaga-l.
OBS: Mtodo e Superclasses sero vistos ainda nesta aula, portanto no se preocupem em entender isto agora, apenas quero explicar como representar uma classe por variveis, pois isto ser importante para o entendimento dos tpicos 2 e 3 desta aula.
Tpico 2 Mdulos
Mdulos so objetos muito semelhantes s classes, a nica diferena, basicamente o modo de ser usada. Os mdulos tambm devem ser declarados antes de seu uso, e seguem as mesmas regras que as classes, para serem declaradas, exceto pelo uso da palavra module, ao invs de class. Exemplo:
module Nome_do_mdulo end
Ao declarar um mdulo j declarado voc poder alterar o mdulo sem apag-lo. OBS: Os mdulos no podem ser representados por variveis pela forma com que so utilizados (ser visto mais tarde)
OBS: Se o mtodo do mdulo a ser includo j existir por meio de uma herana de uma superclasse, o mtodo do mdulo ter prioridade, logo, o mtodo da superclasse ser excludo.
Tpico 3 Mtodos
Os Mtodos o que fazem as classes e mdulos funcionarem, sem eles, nada aconteceria. Os mtodos podem ser comparados com os comandos dos eventos do RPGMaker, ps a travs deles que tudo funciona, cada mtodo tem uma funo especfica, como por exemplo: verificar se o jogador apertou alguma tecla, atualizar os valores das janelas a cada frame(frame o tipo de contagem de tempo utilizado pelo RPGMaker), mudar valores de variveis, etc.. OBS: Cada comando dos eventos do RPGMaker chama um mtodo para realizar uma ao desejada. Os mtodos so, geralmente, declarados dentro das classes e mdulos, no existe nenhum mtodo declarado fora de classes e mtodos nos scripts padres do RPGMakerXP & VX, apesar de ser possvel declar-los fora das classes e mtodos.
Para declarar os mtodos utilizado a palavra def e logo depois o nome do mtodo(separado por um espao), e um end para determinar o final do mtodo. Exemplo:
def nome_do_mtodo end
Cada mtodo s poder ser chamado a partir da classe ou mdulo a qual ele pertence, se ele foi declarado de fora de uma classe e mdulo, ele poder ser chamado de qualquer lugar, incluindo pelos eventos. (porm, existe outra forma mais utilizada para chamar mtodos por eventos) Chamando Mtodos Os mtodos podero ser chamados simplesmente por escrever o nome do mtodo desejado. Exemplo:
# Est um mtodo def nome_do_mtodo end # Para chamar este mtodo se utiliza o comando: nome_do_mtodo
Mtodos carentes de valores Alguns mtodos necessitam de determinados valores para seu correto funcionamento, estes valores devem ser determinados ao chamar o mtodo. Para determinar os valores basta coloc-los dentro de parnteses logo aps o nome do mtodo, separados por vrgulas no caso de mais de um valor; os valores necessitados tambm devem estar especificados quando declarado o mtodo. Exemplo:
# Est um mtodo def nome_do_mtodo(valor) end # Para chamar este mtodo se utiliza o comando: nome_do_mtodo # Neste caso ocorrer um erro, pois no foi especificado o valor nome_do_mtodo(5) # Neste caso, o mtodo ser chamado com o valor 5
Note no exemplo acima, que foi escrito valor dentro dos parnteses, assim, ser declarada uma varivel chamada valor, dentro deste mtodo. No caso acima valor ser 5, j que o mtodo foi chamado juntamente com o nmero 5. Outro Exemplo:
# Est um mtodo def nome_do_mtodo(valor1, valor2, valor3) end # Para chamar este mtodo se utiliza o comando: nome_do_mtodo(16, String, [4, 22]) # Note que qualquer tipo de valor pode ser utilizado.
Para encerrar o assunto, irei mostrar um mtodo retirado de uma classe do RGSS.
Exemplo:
# # # # # Mtodo remove_actor da classe Game_Party. Este mtodo utilizado para remover um heri do grupo. Ele chamado sempre que ns utilizamos o comando mudar membro nos eventos e escolhemos expulsar um membro do grupo. note a varivel actor_id na declarao do mtodo def remove_actor(actor_id)
@actors.delete(actor_id) # Este comando exclui o membro do # grupo de ID definido ao chamar o mtodo. $game_player.refresh aula. # Este comando ser explicado nesta mesma
end # Este end determina que acaba aqui o mtodo, ele j fez tudo que tinha que fazer.
OBS: Ao declarar um mtodo j declarado, o novo mtodo ir substituir o j declarado, a no ser que seja utilizado o comando alias. (ser visto ainda nesta aula)
Graphics, o nome de um mdulo, transition o nome de um mtodo do mdulo Graphics, e 10 o valor requerido pelo mtodo transition. Chamando mtodos de classes. Existe uma forma muito utilizada para chamar mtodos das classes, a partir de uma outra classe ou de um mdulo, a utilizao de uma varivel para representar uma outra classe. Como j foi explicado no tpico 1.1, variveis podem representar classes. Aps equalizar a varivel a uma classe, devem-se utilizar regras parecidas com o modo de chamar mtodos de mdulos, porm, como ns temos uma varivel, para representar uma classe, deve ser citado o nome dessa varivel ao invs do nome da classe.
Exemplo:
$game_player = Game_Player.new Scene_Tile, linha 125. # Trecho tirade da classe
# em outra parte do mesmo script encontramos a seguinte linha: $game_player.moveto($data_system.start_x, $data_system.start_y) # Linha 216. # Como a varivel $game_player representa a classe Game_Player, # foi s utilizar um ponto e o nome do mtodo para cham-lo (.moveto) # note que foi necessrio utilizar 2 valores neste mtodo: # ($data_system.start_x, $data_system.start_y) # Eles representam as coordenadas x e y em que ir comear o jogo, # pois tirei esta linha de dentro do mtodo da Scene_Title que faz o new_game. # Note tambm que a varivel $game_player, que representa a classe Game_Player, # uma varivel global, e pode ser acessada de qualquer lugar, incluindo dos eventos
Vamos fazer um teste, crie um novo evento, e utilize o comando $game_player.moveto($data_system.start_x, $data_system.start_y), e teste o jogo. O mtodo utilizado o que move o personagem at o seu local de origem, nas especificaes $data_system.start_x, $data_system.start_y. Tente agora substituir estes valores por outros valores quaisquer, exemplo: $game_player.moveto(6,4). O mtodo moveto o mtodo utilizado para fazer o teleport dos eventos, porm ele s move o personagem de posio no mapa, outros mtodos so utilizados juntos para que isto acontea, explore os mtodos das classes Game_Player, Game_Party e Game_Actor e voc encontrar alguns mtodos bem legais.
Exemplo:
# Trecho abaixo attr_reader attr_reader attr_accessor attr_accessor attr_accessor retirado a classe Game_Party, linhas 16 at 20. :gold :steps :last_item_id :last_actor_index :last_target_index
Para exemplo de superclasses temos Window_Base e Scene_Base, todas as Windows e Scenes so derivados delas. As classes filhas podem utilizar todas as classes j declaradas pela sua classe me, ou Superclasse. Exemplo:
# Mtodo retirado da classe Window_Status, Linhas 20 29. def refresh self.contents.clear draw_actor_name(@actor, 4, 0) draw_actor_class(@actor, 128, 0) draw_actor_face(@actor, 8, 32) draw_basic_info(128, 32) draw_parameters(32, 160) draw_exp_info(288, 32) draw_equipments(288, 160) end =begin Se voc abrir seu RPGMaker VX e ir na classe Window_Status, no ir encontrar a declarao dos mtodos draw_actor_name, draw_actor_class e draw_actor_face; pois estes mtodos pertencem classe Window_Base, porm, a classe Window_Status, filha de Window_Base, logo, ela tem permio para utilizar seus mtodos. =end
As classes filhas tambm iro herdar as variveis de instncia de sua superclasse, pois as variveis de instncia(para quem no se lembra) so aquelas que pertencem unicamente classe a qual foi declarada. Ao declarar um mtodo j declarado por sua superclasse, o novo mtodo ir substituir o j declarado, a no ser que seja utilizado o comando alias. (ser visto ainda nesta aula) Porm o mtodo j declarado poderar ser chamado pela palavra super.
Exemplo:
# Mtodo initialize da classe Window_Status def initialize(actor) super(0, 0, 544, 416) @actor = actor refresh end # O mtodo initialize j foi declarado pela sua superclasse. # Utilizando super(0, 0, 544, 416) ser o mesmo que chamar initialize(0, 0, 544, 416) # Pois que o comando super chama o mesmo mtodo, porm, de sua superclasse.
Se voc observar os scripts padres do RPG Maker notar que existem muitas classes que so classes filhas e que suas superclasses so, por sua vez classes filhas de outras superclasses, como exemplo de Window_EquipItem, que filha de Window_Item, que filha de Window_Selectable, que filha de Window_Base, que filha de Window, que filha de Object, que filha de Kernel. (as classes Window, Object e Kernel so classes internas do RGSS, e so impossveis de serem observadas pelo editor do maker.)
Tpico 5 Alias
Alias um comando que serve para alterar o nome dos mtodos j criados tanto por superclasses quanto pelas prprias classes. Este comando muito utilizado por criadores de scripts para no alterar os mtodos j existentes nas classes que forem alteradas, apenas adicionando mais comandos aos mesmos. Quando um alias for utilizado ele deve estar dentro da mesma classe que o mtodo em qual o alias dever alterar o nome, j que no permitido o uso de exprees como objeto.mtodo. Para utilizar o comando alias basta escrever a palavra alias seguida do nome a ser alterado do mtodo e o nome original do mtodo. Exemplo:
# Trecho retirado do meu script Tempo de Jogo, linhas 70 74. alias dc_tempo_de_jogo_start start def start dc_tempo_de_jogo_start @playtime_window = Window_PlayTime.new(@gold_window.x, @gold_window.y - 88) End
O alias mudou o nome do mtodo original da classe Scene_Menu de start para dc_tempo_de_jogo_start, logo depois foi declarado o novo mtodo start, e nele, chamado o mtodo dc_tempo_de_jogo_start, ou seja, o mtodo start original, j que seu nome mudou; e depois vem o comando @playtime_window = Window_PlayTime.new(@gold_window.x, @gold_window.y - 88). Em outras palavras, adicionado o comando @playtime_window = Window_PlayTime.new(@gold_window.x, @gold_window.y - 88) ao mtodo start da classe referente.
Logo, s acontecero condies se a expresso citada na condio tiver valor de true ou false.
Operadores:
== != > < >= <= # # # # # # Igual Diferente de Maior que Menor que Maior ou igual que Menor ou igual que
OBS: Tenha cuidado para no confundir os operadores condicionais com os operadores matemticos. O operador ==, por exemplo, um operador condicional, j o operador matemtico =, utilizado para definir o valor de uma varivel, como ja foi visto em aulas anteriores. Para uma maior compreenso do assunto, aqui vai alguns exemplos:
3 == 3 4 == 2 5 == [5] [5] uma array) 1_000_000 == 1000000 varivel == varivel string == string string == # true # false # false (5 um nmero, e # # # # true true true false
Como os valores varivel e 5 esto separados por um operador condicional, o programa ir verificar se o valor de varivel igual a 5, se for, a espreo ser substituda por um true, logo, a espreo p sim ser utilizada, mas se varivel no for igual a 5, a espreo ser substituda por um false, logo, a espreo p sim ser ignorada. Vamos aula prtica, crie um script acima de todos os outros em seu projeto (acima de todos os outros para que ele ocorra antes dos outros), e digite a seguinte espreo:
p 5 == 5
Agora teste o jogo, ver que o valor que apareceu na tela foi true, ps como 5 igual a 5, a espreo foi substituda pelo valor true. Agora mude a espreo colocando outros valores no lugar dos cincos e teste para ver o que acontece, coloque tambm nmeros diferentes como 4 == 6, e outros tipos de valores que voc aprendeu na aula
2, como strings e arrays, por exemplo. Teste tambm outros operadores, como por exemplo 2 > 1. OBS: Note que voc no pode utilizar os operadores >, <, => e <= com valores de arrays e strings, porm, voc pode utilizar == e !=, mesmo que no esteja utilizando junto com valores iguais. Exemplo:
string == [1, 2, 3] RPGMaker XP == RPGMaker VX [5, 4, 6] == [7, 2, 0] string != [1, 2, 3] RPGMaker XP != RPGMaker VX [5, 4, 6] != [7, 2, 0] # false # false # false # true # true # true
Utilizao Alternativa das expresses Como j dito anteriormente existem vrios tipos de condicionais alm do tradicional explicados acima. Estas formas alternativas so utilizadas com o mesmo conceito das esprees j explicadas, porm com poucas alteraes Condies de uma linha Estas so utilizadas quase da mesma forma que a tradicional explicada acima, porm, s tm suporte um comando. Para utiliz-la faa da mesma forma que foi esplicado, porm, coloque tudo na mesma linha com a palavra then logo aps os valores condicionais. Exemplo:
# condicional comum: if varivel == 5 p sim end # condicional de uma linha: If varivel == 5 then p sim end sim # se varivel for igual a 5, p
Ocorrer exatamente a mesma coisa que a condicional comum, porm, utilizando um espao de linhas menor, como mostra o exemplo acima. Voc tambm pode utilizar um else, para definir uma exceo:
# condicional comum: if varivel == 5 p sim else p 'nao' end # condicional de uma linha: if varivel == 5 then p sim" else p 'no' end igual a 5, p sim, se no, p 'no' # se varivel for
OBS: Excees sero vistas ainda nesta aula Condies de um comando Outra forma de resumir uma condicional comum uma linha simplesmente colocar o resultado antes da palavra if. Exemplo:
# condicional comum: if varivel == 5 p sim end # condicional de uma linha: p sim if varivel == 5 # p sim, se varivel for igual a 5
ou
if varivel == 5 or outra_varivel == 3 end
Elas representam uma maior necessidade de requisitos para a estrutura. O And (em ingls, e) indica que ambas as condies devero ser cumpridas para a estrutura ser ativada. O Or (em ingls, ou) indica que a estrutura ser ativada se qualquer uma condio for ativada. Exemplo:
# A estrutura abaixo ser ativada se varivel e outra_varivel forem, # respectivamente iguais a 5 e 3. if varivel == 5 and outra_varivel == 3 end
# A estrutura abaixo ser ativada se varivel ou outra_varivel for, # respectivamente 5 ou 3. if varivel == 5 or outra_varivel == 3 end
And e Or podem ser usadas quantas vezes forem necessrias, para no haver estruturas dentro de estruturas. Exemplo:
# Lembrando que voc aprendeu na aula 2 que variveis de tipos diferentes sero # sempre variveis distintas, mesmo que tenham o mesmo nome. if varivel == 5 and @varivel == 5 and $varivel == 5 and VARIVEL == 5 end
ou
if varivel == 5 or @varivel == 5 or $varivel == 5 or VARIVEL == 5 end
OBS: O comando Toogle Switch(do maker 2003) foi extinto exatamente pelo fato de ele poder ser facilmente feito por scripts, como mostra o exemplo acima. sempre bom lembrar que, como o ruby ignora os espaos em branco sempre que h necessidade de um novo valor, as condies rpidas podem ser expressas da seguinte forma, facilitando sua compreenso:
varivel == true ? varivel = false : varivel = true # Se varivel for true... # Ela se transforma em false, # Se no, ela se transforma em true
Logo, as condies rpidas tambm podem ser utilizadas vrias veses de uma s vez: Cdigo:
# O trecho abaixo foi retirado da classe Window_Base do RMXP, linhas 301 a 305. # Desenhar HP self.contents.font.color = actor.hp == actor.maxhp ? Color.new(64,255,128) : actor.hp <= actor.maxhp / 5 ? knockout_color : actor.hp <= actor.maxhp / 2 ? crisis_color : normal_color # Note como as condies so repetidas vrias vezes. # As condies rpidas so apenas para diminuir o nmero de linhas utilizadas # por condies mais simples, pois, apesar de este exemplo estar em vrias linhas, # ele poderia ter sido feito em apenas uma linha, eliminando os espaos. # Voc no obrigado a entender este exemplo agora, ps j algo mais avanado, # e por tanto no ser cobrado at que voc se especialize em scripts.
Voc pode utilizar vrios valores em cada when, para no precisar repeti-lo, utilizando todos os valores possveis separados por vrgulas. Vamos fazer um teste, abra o editor de seu projeto e v na linha 67, e onde tem o 0(zero), coloque 0, 1, 2; e teste o jogo. Voc perceber que no importa qual boto voc clicar, todas iro redirecion-lo ao new game, ps voc definiu que se o cursor estiver em qualquer um dos botes 0, 1 e 2; eles iro lev-lo para o mtodo new_game (que est logo abaixo do when 0, 1, 2). Voc poder tambm utilizar um else, entre o ltimo when e o end, para determinar uma exceo. (excees sero vistas ainda nesta aula) Exemplo 1: (string)
sabor_do_biscoito = morango case biscoito when chocolate # o biscoito de chocolate when morango # o biscoito de morango when limo # esse biscoito ruim >_< End
Exemplo 2: (range)
preo_do_biscoito = 5 case biscoito when 0 ... 2 # que biscoito barato when 3 ... 6 # o biscoito est num preo normal when 7 ... 1_000_000 # biscoito de ouro end
Excees Condicionais As Excees condicionais so um tipo de exceo utilizado somente nas condicionais if e unless. Elas representam uma segunda condio dentro da exceo da condio principal. Para determinar uma exceo condicional utilize a palavra elsif, ao invs de else, seguido da condio. Exemplo:
if varivel == 0 # condio elsif varivel == 1 # exceo condicional else # exceo end
Note que o comando break, est em uma condio: break if $scene != self, ou seja, o loop s ser quebrado no caso de a varivel $scene for diferente ( != ) de self. self ser visto mais profundamente no futuro, self representa a prpria classe em que foi escrito. Caso a condio de $scene ser diferente de self no for cumprida, chegar no final sem um break, logo, ela ir recomear a partir do primeiro comando. (neste caso, Graphics.update)
Na mesma linha da declarao do incio da estrutura, foi declarada uma condio para a quebra da estrutura (se $scene != nil). A estrutura ser repetira sempre que a condio no for cumprida, e ser quebrada no caso de esta condio no for cumprida, ou no caso do uso da quebra de estruturas break.
Percebe-se que o mtodo draw_item, um mtodo que necessita de dois valores, por isso os parnteses, com as duas variveis separadas por vrgula, i e normal_color. Cada vez que a estrutura for repetida, a varivel i ter um valor diferente, sendo este valor um valor que vir ds de 0, at o valor da varivel @item_max, por exemplo: se @item_max for 3, a cada vez que a estrutura for repetida, i ter um valor de: 0, depois 1, depois 2, e por ltimo 3. Logo, se @item_max for 3, a estrutura acima seria o mesmo que o exemplo abaixo:
Este tipo de estrutura muito til, quando voc quer utilizar vrias veses um mesmo comando, porm com valores diferente, exatamente como os exemplos citados acima.
Float (Nmeros Decimais) so nmeros que esto entre um nmero inteiro e outro, exemplo:
... , 0.7 , 0.8 , 0.9 , 1.0, 1.1 , 1.2 , 1.3 , ...
OBS: Note que um valor Float no se transformar em integer se ele terminar com .0. Note tambm que uma Integer, quando dividida por um valor inadequado (10/3, por exemplo) ser arredondado (o resultado seria 3), porm, em float(10.0/3) resultaria no valor correto(3.333...). Logo, o valor Float utilizado somente em raros casos, o HP dos personagens, por exemplo, uma Integer. (Imagine se seu HP ficasse 3.333... entendeu agora porque ele fica em Integer ao invs de Float?) Os Integer so divididos em dois grupos: Fixnum, e Bignum. Fixnum sero Integers pequenas (com valores pequenos), enquanto Bignums (valores raramente usados) so nmeros que excedem o limite da memria para estes valores. Exemplo:
1, 2, 3, 4, 5, 6, ... 1_000_000_000_000 # Fixnum # Bignum
OBS: Lembre-se que Bignum e Fixnum so classes filhas de Integer, logo, um Float nunca ser um Bignum ou Fixnum, exemplo:
1_000_000_000_000 1_000_000_000_000.0 # Bignum # Float
# claro que alterando o valor de memria_ram obteramos outros valores memria_ram = 256 # Agora, o programa interpretar o texto da seguinte forma: # A sua memria RAM de: 256 Mb.
Mtodos A classe String possui alguns mtodos extremamente teis para casa tipo de situao, estes mtodos podem ser complexos para serem compreendidos, e no sero utilizados com grande freqncia no ruby, portanto no obrigatrio o compreendimento de cada um deles. Os principais so: downcase/upcase, sub/gsub e scan. Downcase e Upcase Downcase e Upcase alteram cada letra contida na String entre letras minsculas e maisculas. Downcase e Upcase so mtodos que alteraro o valor da String somente no momento em que forem utilizados, para alterar o valor da String permanentemente, so utilizados uma exclamao (!) aps as palavras downcase e upcase. Exemplo:
string = Pipoca Salgada string.upcase # PIPOCA SALGADA string.downcase # pipoca salgada string # Pipoca Salgada string.upcase! string # PIPOCA SALGADA string.downcase! string # pipoca salgada
Sub e Gsub Sub e Gsub so comandos utilizados para uma substituio de determinadas palavras da String por outras palavras. Para utilizar os comandos Sub e Gsub necessrio aps chamar o mtodo, um valor a ser substitudo (ser colocado entre parnteses) e um valor a substituir (ser colocado entre chaves). A nica diferena entre Sub e Gsub que Gsub ir substituir todos os trechos da String que conhecidirem com o valor entre parnteses, e Sub ir substituir somente o primeiro valor encontrado, como mostra o exemplo a seguir:
pipoca = Pipoca Salgada pipoca.sub(Salgada){Doce} pipoca # Pipoca Doce texto = o rato roeu a ropa do rei de roma texto.gsub(r){l} text # o lato loeu a lopa do lei de loma
Scan Scan um mtodo utilizado para recolher uma array com todos os valores do texto desejado. Exemplo:
texto = o rato roeu a ropa do rei de roma text_escaneado = texto.scan(ro) texto_escaneado # [ro, ro, ro]
Cada valor contido em uma Array tem um id, que corresponde a sua posio, dentro da Array, comeando a contagem do 0 (zero). Exemplo:
array = [4, [16, [0, 82], 39.4], texto, 1_000_000, [varivel: #{varivel}, 8] ] =begin id 0: 4 id 1: [16, [0, 82], 39.4] id 2: texto id 3: 1_000_000 id 4: [varivel: #{varivel}, 8] ] =end
Voc pode alterar diretamente um nico valor de uma array, colocando seu id entre chaves logo aps o nome da array. Exemplo:
array = [] array[0] = array[1] = array[2] = array[3] = varivel = array[4] = # Declara a varivel array 4 [16, [0, 82], 39.4] texto 1_000_000 10 [varivel: #{varivel}, 8] ]
# a varivel array passar a ter o seguinte valor: # array = [4, [16, [0, 82], 39.4], texto, 1_000_000, [varivel: 10, 8] ]
Voc pode utilizar os valores dentro da array da mesma forma que outra varivel qualquer. Exemplo:
array = [1, 2, 3] array[1] = 3 array[2] = 9 array[0] -= 1 # array agora esta assim: [0, 3, 9]
OBS: Ao tentar selecionar um valor ainda no declarado pela array, ele ser nil, exemplo:
array = [1, 2] # array[2] nil, array[3] nil, array[4] nil... array[3] = 4 # array agora esta assim: [1, 2, nil, 4]
Voc tambm pode adicionar determinados novos valores array, simplesmente somando uma array com outra. Exemplo:
array = [1, 2, 3] array += [4, 5, 6] # array agora est assim: [1, 2, 3, 4, 5, 6]
Voc pode selecionar tambm uma determinada quantidade de valores de uma nica vez, utilizado dois valores, dentro das chaves. O primeiro determinar o id do primeiro valor a ser alterado, o segundo determinar a quantidade de valores que devero ser selecionados. Exemplo:
array = [0, 0, 0, 0, 0, 0, 0, 0] array[1, 6] = [1, 1, 1, 1, 1, 1] # array agora est assim: [0, 1, 1, 1, 1, 1, 1, 0] array[1, 6] = 1 # array agora est assim: [0, 1, 0]
Mtodos Por ser uma classe, Array tem alguns mtodos que devero ser utilizados de acordo com a situao. Os principais mtodos de Array so: clear, compact, delete/delete_at, empty?, include?, index, length/size, nitems, shift/unshift, push/pop, reverse/sort. Clear Clear um comando muito simples, que apaga a array, o mesmo que redeclarar a array. Exemplo:
array = [] # Declara a varivel array
array[0] = 4 array[1] = [16, [0, 82], 39.4] array[2] = "texto" array[3] = 1_000_000 array[4] = ["varivel: 10", 8] array += [4, 5, 6] array[1, 3] = [1, 2, 1] # array agora est assim: [4, 1, 2, 1, ["varivel: 10", 8], 4, 5, 6] array.clear # array agora est assim: []
Compact Compact um simples comando que elimina todos os valores nil da array. Exemplo:
array = [1, 2] array[6] = 0 # array agora esta assim: [1, 2, nil, nil, nil, nil, 0] =begin array.compact ser: [1, 2, 0] note que o comando compact no altera o valor verdadeiro da array. (assim como downcase/upcase, das strings) assim, como downcase/upcase, compact tambm poder ser utilizado com uma exclamao para alterar definitivamente o valor da array =end array2 = array.compact # array ainda est assim: [1, 2, nil, nil, nil, nil, 0] # array2, est assim: [1, 2, 0] array.compact! # agora, array est assim: [1, 2, 0]
Delete e Delete_at Delete e Delete_at so commandos extremamente parecidos, porm utilizados de forma diferente. Ambos tm a funo de eliminar um determinado valor da array, alterando assim toda a estrutura, e conseqentemente, os ids de cada um dos valores que estiverem posicionados aps o valor eliminado. Para utilizar o Delete necessrio especificar o valor a ser deletado na array, logo aps o comando. O programa ir procurar por todos os valores especificados, que a array guardar, e apag-los. Exemplo:
array = [1, 2, 3, 2, 1, 2, 3, 1, [1, 2, 3]] array.delete(2) # array agora est assim: [1, 3, 1, 3, 1, [1, 2, 3]] array.delete(1) # array agora est assim: [3, 3, [1, 2, 3]] array.delete(3) # array agora est assim: [[1, 2, 3]] array.delete([1, 2, 3]) # array agora est assim: []
J o comando Delete_at, apaga apenas o valor que estiver na posio definida ao chamar o comando. Exemplo:
array = [1, 2, 3, 2, 1, 2, 3, 1] array.delete_at(2) # array agora est assim: [1, 2, 2, 1, 2, 3, 1] array.delete_at(0) # array agora est assim: [2, 2, 1, 2, 3, 1] array.delete_at(4) # array agora est assim: [2, 2, 1, 2, 1]
Empty? O comando empty, utilizado em condies, ele ser substitudo por true, ou false sempre que for chamado, sendo true se a array tiver valor [] (nenhum valor), e false se ela tiver ao menos um nico valor. Exemplo:
if array.empty? # a array est vasia else # a array tem algum valor end
Exemplo 2:
array.clear if array.empty? print a array est vasia end =begin No importa qual valor array tinha antes do comando array.clear, a condio ser cumprida, ps todos os valores da array foram apagados no comando array.clear. =end
Include? A forma de utilizar o comando Include? extremamente semelhante ao comando empty pelo fato de ambos se referirem a uma condio. O comando Include? verifica se a array tm algum valor especfico. Exemplo:
if array.include?(5) # dentro de array, existe um 5 else # dentro de array, no existe nenhum 5 end
Index Index seleciona o id de um determinado valor. Se a Array tiver mais do que um valor especificado, ser selecionado o id do primeiro valor, se a Array no possuir nenhum valor igual ao especificado, o comando ser substitudo por nil. Exemplo 1:
array = [1, 2, 3] id = array.index(2)
# neste caso, id 1
Exemplo 2:
array = [1, 2, 3, 2, 1] id = array.index(2) # neste caso, id 1 id = array.index(1) # neste caso, id 0
Exemplo 3:
array = [1, 3, 1, 3] id = array.index(2) # neste caso, id nil
length/size Este comando bem simples, ele seleciona o tamanho da Array, ou seja, o nmero de valores contidos na mesma. Exemplo:
array = [1, 2, 3] array.length # neste caso, ser 3
array = [0, 0, 0, 0, 0, 0] array.size # neste caso, ser 6 array = [] array.length # neste caso, ser 0
array = [texto 01, texto 02, texto 03] array.size # neste caso, ser 3
OBS: Observe que no h qualquer diferena entre os comandos length e size, apenas a palavra. Nitems Seleciona o nmero de valores no nil existentes na array. Exemplo:
array = [1, 2, 3, 4, 5] array.nitems # neste caso, ser 5 array = [1, nil, 3, nil, 5] array.nitems # neste caso, ser 3 array = [] array.nitems # neste caso, ser 0
array = [nil, nil, nil] array.nitems # neste caso, ser 3 array = [0, nil, 1, nil, nil, 2, nil] array.nitems # neste caso, ser 3
OBS: Note que nitems ser igual a size/length sempre que no existir nenhum nil, na array.
Shift/Unshift Shift e Unshift so comandos utilizados para adicionar ou remover elementos, de id 0 da array. O comando Shift ir remover o primeiro elemento da array, e Unshift adiciona um novo elemento a array, que vir como id 0, mudando a posio dos outros valores da array. Exemplo:
array = [1, 2, 3] array.shift # array, agora est assim: [2, 3] array.unshift(1) # array, agora est assim: [1, 2, 3]
Push/Pop Push e Pop so comandos extremamente parecidos com Shift e Unshift, a nica diferena que os comandos Push e Pop trabalham com o ltimo valor da array, diferente de Shift e Unshift, que se referem ao primeiro valor da array. Exemplo:
array = [1, 2, 3] array.pop # array, agora est assim: [1, 2] array.push(3) # array, agora est assim: [1, 2, 3]
Sort e Reverse Sort um Comando que organizar a array em uma ordem fixa, e reverse inverter a array para que sua ordem de valores fique na ordem inversa. Uma array no pode conter tipos diferentes de valores quando utilizar o comando sort, pois neste caso ocorrer um erro. Se a array conter somente valores numricos, ela ser organizada por ordem de valores do menor para o maior, se ela conter somente textos (strings) ela ser organizada em ordem alfabtica, e se ela conter somente arrays, seus valores devem conter somente um mesmo tipo de valor, e assim sucessivamente. Exemplo:
array = [5, 8, 9, 7, 4, 2, 6, 8] array.sort # array, agora est assim: [2, 4, 5, 6, 7, 8, 8, 9] array.reverse # array, agora est assim: [9, 8, 8, 7, 6, 5, 4, 2] array = [Dark Chocobo, Jo Rafael, Cabana Ruby, Reino RPG] array.sort # array, agora est assim: [Cabana Ruby, Dark Chocobo, Jo Rafael, Reino RPG] array = [Dark, Chocobo, Jo, Rafael, Cabana, Ruby, Reino, RPG]
array.sort # array, agora est assim: [Cabana, Chocobo, Dark, Jo, Rafael, Reino, RPG, Ruby]
No Exemplo acima, os nomes valor 01, valor 02 e valor 03 representaro os nomes dos valores 5, 10 e 15. Note que, como nas hashes no importa a ordem com que os valores esto na Hash, o exemplo poderia ser realizado tambm das seguintes formas:
hash = { valor 01 => 5, valor 02 => 10, valor03 => 15 } ou hash = { valor02 => 10 , valor 01 => 5, valor 03 => 15 } ou hash = { valor 03 => 15 , valor02 => 10 , valor 01 => 5 # Em outras palavras, no importa a ordem utilizada.
Como eu determinei certos valores para representarem cada valor, eu deverei coloc-los no lugar do id do valor, e cham-lo exatamente igual as Arrays. Exemplo:
hash = {} hash[valor 01] = 5 hash[valor 02] = 10 hash[valor 03] = 15 # Desta forma, resultaria uma hash exatamente igual a hash do exemplo anterior.
Como foi dito, cada valor da hash dever ser representado por um nome ou um nmero, logo, eu poderia criar uma hash desta forma tambm:
hash = {} hash[0] = 5 hash[1] = 10 hash[2] = 15 # Lembrando que 0, 1 e 2 so os nomes que representam cada valor 5, 10 e 15 da hash, # e no os ids dos mesmos, pois hashes no tm ids.
Mtodos Por ser uma classe, Hash tambm tem seus prprios mtodos, que devero ser utilizados de acordo com a situao, seus principais mtodos so: clear, delete, empty, has_key?/include?, has_value?, index, keys, length/size, values. Clear, Delete, Empty?, Length e Size Estes comandos, tambm esto presentes nas Arrays, por este motivo, suas explicaes sero bem simples: Clear apaga cada valor da Hash, como se a apagasse e a recriasse sem nenhum valor. Exemplo:
hash = { valor => 0 } hash.clear # hash agora est assim: {}
Delete deve ser utilisado com um valor entre parnteses. Delete apaga qualquer valor que tiver como representante o valor entre parnteses. Exemplo:
hash = { valor 01 => 5, valor 02 => 10, valor03 => 15 } hash.delete(valor 01) # hash agora est assim: { valor 02 => 10, valor03 => 15 }
Empty? deve ser colocado numa condio, ele ser substitudo por true se a hash no tiver qualquer valor. Exemplo:
if hash.empty? # significa que a hash est assim: {} else # significa que a hash no est assim: {} End
Index O comando Index ser substitudo pelo nmero ou texto que representa o valor especificado entre parnteses ao chamar o comando.
hash = { valor 01 => 0, valor 02 => 1, 0 => 42, 1 => 56 } nome1 = hash.index(valor 02) nome2 = hash.index(0) # neste caso, nome1 ser 1 e nome2 ser 42.
Values O comando ser substitudo por uma Array que ir conter todos os valores da Hash. Exemplo:
hash = { valor 01 => 0, valor 02 => 1, 0 => 42, 1 => 56 } # neste caso, hash.values ser: # [0, 1, 42, 56]
Keys Keys um comando extremamente semelhante ao Values, porm, ao contrrio de Values, em Keys voc obter uma Array com os valores referentes aos textos e nmeros que representam cada um dos valores, na Hash. Exemplo:
hash = { valor 01 => 0, valor 02 => 1, 0 => 42, 1 => 56 } # neste caso, hash.keys ser: # [valor 01, valor 02, 0, 1]
Has_value? Este, um comando que dever ser utilizado como condio. Ele determina se a Hash possue algum determinado valor. Exemplo 1:
if hash.has_value?(10) # algum dos valores da Hash 10 else # nenhum valor da Hash 10 end
Exemplo 2:
hash = { valor 01 => 0, valor 02 => 1, 0 => 42, 1 => 56 } # # # # # # neste neste neste neste neste neste caso, caso, caso, caso, caso, caso, hash.has_value?(0) ser true hash.has_value?(1) ser true hash.has_value?(2) ser false hash.has_value?(42) ser true hash.has_value?(56) ser true hash.has_value?(texto 01) ser false
Has_key? / Include? Has_Value e Include devero ser utilizados em condies, e no h diferena entre eles. Eles determinam se a Hash tem como representante de um valor, o texto ou nmero especificado. Exemplo:
if hash.has_key?(texto 01) # significa que algum valor tem como representante: texto 01
esle # significa que nenhum dos valores da Hash tm texto 01 como representante # em outras palavras, hash[texto 01] no existe end
OBS: Ao utilizar uma destas letras (i ou m) logo aps uma Ragexp no editor do RMVX voc perceber que esta letra tambm ficou da cor roxa. A letra i torna a Ragexp uma expresso que no diferencia letras maisculas de minsculas. A letra m ativa o modo multiple-run, que faz com que novas linhas sejam tratadas como caracteres normais, como um ponto. ( . )
os outros (para que ocorra primeiro), e ento crie uma estrutura for como a do exemplo abaixo:
for i in 0 ... 3 print i end
Agora teste o jogo, e veja o resultado, tendo em mente a funo do comando print (abrir uma janela padro do Windows mostrando o valor de i). Aparecer 4 vezes a janela, cada vez ser mostrado um valor diferente, sendo eles: 0, 1, 2 e 3. Isso aconteceu porque a cada vez que a estrutura se repete, i tem um valor diferente, neste caso, os valores 0, 1, 2 e 3. Com j foi dito, tambm podemos utilizar uma array no lugar da range, se ao invs de 0 ... 3 fosse utilizado a array.
O comando return tambm pode ser utilizado seguido de um valor, neste caso, o valor determinado ir retornar ao local de onde foi chamado o mtodo.
Exemplo:
def mtodo return 5 end varivel = mtodo # varivel ter o valor de 5, pois mtodo foi subtituido pelo valor de retorno 5
OBS: Note que o comando return, quando vem seguido de um valor de retorno, faz com que o comando de chamar o mtodo seja substitudo pelo valor do retorno. Note que eu posso colocar qualquer valor no retorno: Exemplo:
def mtodo retorno_1 = 5 retorno_2 = 20 return retorno_1 + retorno_2 end varivel = mtodo + 50 # varivel ter o valor de 150
Eval Comando pouco utilizado, deve ser utilizado sempre seguido de uma string. Faz com que o contedo da string se transforme em um comando (como se tivesse apenas retirado as aspas).
Exemplo 1:
def mtodo return 5 end varivel = eval mtodo # varivel ter o valor de 5
Exemplo 2:
$scene = eval (Scene_Title + .new)
Exemplo 3:
def mtodo eval return end
Exit Este um comando extremamente simples, no tem muito que explicar. Ele simplesmente feicha o jogo. Como teste, crie um novo script acima de todos os outros e coloque simplesmente um exit. Ao testar o jogo, o jogo ir feichar automaticamente, pois o exit est no comeo dos scripts do jogo. Este um comando utilizado eventualmente no caso de erros no jogo. Open O comando open servir para carregar arquivos da pasta do jogo, como arquivos grficos (pictures) e de udio. Este comando pode no ser muito til pelo fato de o prprio RGSS j conter comandos padres para este tipo de uso (para isso serve o mdulo Cache, mas vocs vo aprender isso somente em aulas futuras). Para utilizar o comando open chame-o com o respectivo diretrio do arquivo numa string entre parnteses logo aps do nome do comando. (extenses de nome dos arquivos so necessrios) Exemplo:
@picture = open(Graphics\\Pictures\\Arquivo.png) ou @picture = open(Graphics/Pictures/Arquivo.png)
OBS: Note que tanto / quanto \ podem ser utilizados para separar as pastas do diretrio, porm, quando utilizada a barra inclinada para esquerda, necessrio duas barras, ps \ um dgito utilizado para comandos pelos RPGMakers, logo, necessrio duas barras para o reconhecimento da mesma. p/print Vocs j devem saber para que servem os comandos p e print, mas mesmo assim vou explicar: Ambos os comandos p e print criam uma janela de pop up padro do Windows para exibir um determinado valor. A nica diferena entre eles que o comando p, exibe o valor exatamente como ele ,
diferente do comando print, que exibe o valor na forma de string (ou se preferir: exibe o valor na forma que ele seria exibido no jogo). Exemplo:
print String p String print 1_000_000 p 1_000_000 print [1, 2, 3] p [1, 2, 3] print /Ragexp/ p /Ragexp/
OBS: Crie um novo script acima de todos os outros e coloque o exemplo acima depois d um teste no jogo, e veja na prtica a diferena dos comandos p para print. Rand Este um comando bem simples, e muito utilizado em RGSS. Ele cria um nmero aleatrio qualquer em forma de integer entre 0 e um nmero mximo definido entre parnteses logo aps comando. Exemplo:
varivel_aleatria = rand(255) # o valor de varivel_aleatria poder ser qualquer um entre 0 e 255.
Se o valor mximo for definido como 0 ou no for definido, o comando retorna um nmero float (decimal) aleatrio de 15 dgitos. Printf Este um comando extremamente complexo, e confesso que nem eu sei exatamente us-lo. Sua funo facilitar a substituio de valores contidos dentro de uma string por outros valores tambm em string. Um bom exemplo o chat da batalha do RPGMaker VX, utilizado sempre as mesmas frases (ex: Fulano atacou o monstro!!) porm, algumas palavras podem ser adicionadas/alteradas, como o nmero do dano e o autor da ao, por exemplo. Estes dilogos da batalha do RPGMaker VX so feitos atravs do comando printf, que permite alterar algumas palavras dentro das strings. Para utilizar o comando preciso colocar determinados valores entre parnteses, o primeiro valor a mensagem principal, e os outros so os valores que sero substitudos. Voc dever colocar caracteres como % e # por exemplo, para serem substitudos pelos valores entre parnteses, porm no entendo exatamente como funcionam. Exemplo:
sprintf("%#b", 10) # => "0b1010" sprintf("%#010x", 10) # => "0x0000000a" sprintf("%#05x", 10) # => "0x00a" sprintf("%.*s", 5, "foobar") # => "fooba" sprintf("%s", [1, 2, 3]) sprintf("%p", [1, 2, 3]) # => "123" # => "[1, 2, 3]"
Outro Exemplo:
# A linha abaixo foi retirada da classe Window_PlayTime do RMXP, linha 33 text = sprintf("%02d:%02d:%02d", hour, min, sec)
save_data/load_data Estes dois comandos so utilizados especialmente para salvar e carregar jogos salvos. O comando save_data salva um determinado valor em um arquivo em qualquer diretrio dentro da pasta do jogo. Para us-lo utilize dois valores entre parnteses: o valor que deseja salvar, e o diretrio a salvar. Exemplo:
save_data(5, Arquivo)
Crie um novo script acima de todos os outros, coloque o exemplo acima e teste o jogo, logo depois saia do jogo e olha na pasta do jogo, haver um novo arquivo chamado Arquivo. Note que este novo arquivo no tm uma extenso de arquivo. Agora altere o comando para save_data(5, Arquivo.rxdata) ou save_data(5, Arquivo.rvdata) dependendo do amker que estiver utilizando. Aps o teste de jogo haver um novo arquivo na pasta, com nome Arquivo, mas agora com a extenso do maker. OBS: No obrigatrio o uso da extenso rxdata/rvdata para a leitura do arquivo. O comando load_data carrega um arquivo salvo por meio do comando save_data, para us-lo basta colocar o diretrio do arquivo entre parnteses. Exemplo:
load_data(Arquivo) ou, no caso do teste anterior: load_data(Arquivo.rxdata) load_data(Arquivo.rvdata)
Voc pode observar, que nas classes Scene_Save(RMXP) e Scene_File(RMVX) os arquivos so salvos e carregados de forma diferente, utilizado o mdulo Marshal (que ser estudado em aulas futuras, assim como Cache).
mais detalhadamente em aulas futuras. Segue abaixo a funo bsica das principais classes internas:
Classes Padres do Ruby: Array: Permite o armazenamento de vrios valores em uma nica varivel. Exception: Possui todas as informaes necessrias para utilizao de uma exceo. FalseClass: Pseudo-valor false. (visto na aula 02) Hash: Permite o armazenamento de vrios valores em uma nica varivel. File: Classe que permite o acesso aos contedos externos do jogo. (arquivos da pasta) MatchData: Gerencia o uso de Expresses Regulares. (Permite o uso de Ragexp) Class: Superclasse de todas as classes. Possui as informaes necessrias para o uso de uma classe. NilClass: Pseudo-valor nil, utilizado para quando uma varivel no tem qualquer valor. Numeric: Superclasse de todas as classes que possuem um valor numrico. Integer: Classe que permite o uso de Nmeros Inteiros. (..., -3, -2, 1, 0, 1, 2, 3, ...) Bignum: Integers (nmeros inteiros) de valor extremamente grandes. Fixnum: Integers (nmeros inteiros) que no so Bignums. Float: Classe que permite o uso de Nmeros Racionais. (..., 0.8, 0.9, 1.0, 1.1, 1.2, ...) Range: Valor utilizado geralmente em estruturas for. Armazena vrios valores em uma ordem. Proc: Utilizado para salvar uma varivel, e cham-la quando for necessrio. Ragexp: A expresso regular utilizada em Ruby. String: Permite o uso de valores escritos (texto). Symbol: Permite o uso de expresses smbolo. Time: Controla o tempo (tempo real) utilizado em scripts como Tempo Real. TrueClass: Pseudo-valor true. (visto na aula 02) Classes Internas do RGSS: Bitmap: Exibe uma imagem, geralmente utilizado pelas classes Sprite e Plane. Color: Classe utilizada para mudar as cores principalmente de Bitmaps de Textos. Font: Permite o acesso s fontes do Windows para poder exibir textos. Plane: Semelhante Sprite, com poucas diferenas. Rect: Utilizado para selecionar uma rea do bitmap. Sprite: Gerencia as imagens em geral exibidas pelo jogo. Table: Utilizado como arrays multidimensionais (3D), arrays comuns no suportam tantos dados. Tilemap: Gerencia os tiles do mapa. Tone: Permite a mudana de tom de cor da imagem. (geralmente utilizado em battlers e characters) Viewport: Permite uma imagem ficar exibida por cima de uma outra. Window: Possui todas as informaes necessrias para exibir uma janelinha padro do jogo. RGSSError: Gerencia os erros padres que possam ocorrer nas classes internas do RGSS. RPG::Sprite: Add-on de Sprite. Tem a mesma funo que Sprite, porm, mais efeitos. (somente RMXP) RPG::Weather: Permite o uso do comando opes de clima do RPGMaker. (somente RMXP) Mdulos Padres do Ruby: Comparable: Permite o uso de condies de comparaes. (==, >, <,
etc.) Enumerable: Contm informaes necessrias para o desempenho correto de algumas classes. Errno: Contm informaes sobre os erros que podem ocorrer nos scripts. FileTest: Permite verificar se um determinado arquivo realmente existe. Kernel: Superclasse de Object, que a superclasse de todas as classes. Marshal: Facilita a leitura de arquivos do jogo. (utilizado principalmente em load e save) Math: Permite a utilizao de Floats. Mdulos Internos do RGSS: Audio: Gerencia os arquivos de udio. Graphics: Gerencia tudo que exibido na tela, alm da contagem de tempo. Input: Gerencia a entrada de teclas do teclado/joystick. RPG: Gerencia todas as outras informaes do jogo, que no so scripts. (mapas, database, etc.) RPG::Cache: Facilita a leitura de arquivos grficos do jogo. (no RMVX, se chama apenas Cache)
Como no existe nenhuma classe chamada Nova, eu estou declarando-a. Note que se for utilizando o mtodo 'p' em 'Nova' antes de sua declarao (desta forma: 'p Nova') correr um erro, j que a constante 'Nova' ainda no foi declarada, porm, se for utilizado este mesmo comando aps a declarao da classe, o programa ir detectar a constante e ir exibir "Nova" na janelinha, pois o que foi enviado ao mtodo Nova foi apenas a constante Nova. Somente com a classe Nova no iremos conseguir muita coisa, vamos criar uma nova varivel logo aps a declarao da classe nova, chamarei-a de 'classe_nova', mas voc pode nome-la como bem entender.
class Nova end classe_nova = Nova.new
Utilizando o mtodo 'new' eu fiz com que 'classe_nova' se transformasse em um novo objeto da classe Nova, ou uma outra Nova. OBS1: Mtodos sero vistos ainda nesta aula. OBS2: O mtodo 'new'(assim como alguns outros mtodos bsicos) provido todas as classes automaticamente. Para que fique mais claro o que eu fiz acima vou dar um exemplo:
ary = [2, 4] str = "texto"
Acima eu criei duas variveis, cada um como um novo objeto das classes Array e String; ou seja, eu defini as duas novas variveis como novas classes Array e String sem alterar as constantes. Foi o mesmo que eu fiz em 'classe_nova = Nova.new'. A nica diferena que Array e String so classes padres do Ruby e por isso podem ser criadas desta forma mais fcil, porm, agora no diferena alguma entre Array, String e Nova. Abaixo, mais um exemplo:
ary = Array.new str = String.new
Acima eu criei uma nova Array e uma nova String, se voc utilizar o mtodo 'p' para verificar os valores de 'ary' e 'str' os retornos sero: '[]' e ' "" '; pois sero uma Array e uma String recm criadas, sem nenhum valor nelas, logo, o exemplo acima seria o mesmo que utilizar o seguinte cdigo:
ary = [] str = ""
OBS: Note que, nestes dois exemplos acima, se voc utilizar o mtodo 'print' ao envz de 'p' no ser exibido nada, pois 'print' l os dados da forma como o programa ir exibir no jogo, e um texto vazio (String vazia, "") e um grupo de valores sem nenhum valor (Array vazia, []) no so nada. Agora que j expliquei a funo do mtodo 'new' e a diferena entre a constante e sua utilizao, podemos voltar nossa nova classe, a 'Nova'. Vou citar novamente o exemplo para recuperarmos a concentrao no mesmo:
class Nova end classe_nova = Nova.new
Se voc utilizar o mtodo 'p' em 'classe_nova' aps sua declarao ir obter o seguinte resultado: '#'(ou algum semelhante), isto ocorre porque tudo que ns fisemos at agora foi criar uma nova varivel com o valor de Nova, porm, a classe Nova est totalmente vazia, por isto o programa l a classe desta forma.
mtodo. O nome do mtodo deve ser constitudo de apenas letras minsculas e underlines(_). Exemplo:
def nome_do_mtodo end
Para chamar um mtodo j declarado, deve-se chamar simplesmente pelo nome do mesmo, no caso do exemplo acima, para chamar o mtodo declarado deveria ser utilizado a simples expresso "nome_do_mtodo". Quando um mtodo chamado, ele ir executar todos os comandos que estiverem dentrod ele. Exemplo de uso de um mtodo: (Voc copiar o exemplo abaixo para seu editor e testar o jogo para ver o que acontecer)
def aumentar_variavel variavel += 20 end variavel = 10 aumentar_variavel p variavel # => 30
No exemplo acima, foi executado o comando 'variavel += 20' quando foi chamado o cdigo 'aumentar_variavel', logo, subentende-se que quando um mtodo chamado todo o cdigo que estava dentro dele fosse para o local onde o mtodo foi chamado. Mtodos tambm podem chamar outros mtodos dentro de seu cdigo, mas nunca podem chamar a si mesmos, neste caso ocorreria um erro. Exemplo:
def aumentar_variavel variavel += 20 aumentar_mais_ainda end def aumentar_mais_ainda variavel += 30 end variavel = 10 aumentar_variavel aumentar_mais_ainda p variavel # => 90
Se voc no entendeu o porqu de 'variavel' ter o valor de 90 no final do cdigo, vou esplicar mais detalhadamente o que aconteceu: (Se entendeu, pode pular esta parte de verde) Primeiro, foram declarados os mtodos 'aumentar_variavel' e 'aumentar_mais_ainda', 'aumentar_variavel' ir aumentar o valor de 'variavel' em 20 e depois ir chamar o mtodo 'aumentar_mais_ainda' que, por sua vez, aumenta em 30 a 'variavel', logo, o mtodo 'aumentar_varivel' ter a funo de aumentar 'variavel' em 50. Depois, 'variavel' foi declarado como '10' (Se esta linha no existir, haver um erro ao chamar um dos mtodos, pois 'varivel' no estar declarada ainda) Ento chamado o mtodo 'aumentar_variavel', que aumenta o valor de 'variavel' em 50, passando seu valor para
60 (porque 'variavel' j tinha o valor de 10, e 10 + 50 = 60). E em seguida chamado o mtodo 'aumentar_mais_ainda', que aumenta o valor de 'variavel' em 30, passando seu valor para 90. Substituio de Mtodos Se voc tantar declarar um mtodo j declarado, o mtodo anterior ser apagado, e o novo ficar no lugar. Exemplo:
def aumentar_variavel variavel += 20 aumentar_mais_ainda end def aumentar_mais_ainda variavel += 30 end def aumentar_variavel variavel -= 20 end variavel = 10 aumentar_variavel aumentar_mais_ainda p variavel # => 20
Quebra de Mtodos/Retorno Voc pode "quebrar" a execuo de um mtodo utilizando o comando "return". Quando "return" for executado, nenhum cdigo que vir depois dele num mesmo mtodo ser executado. Exemplo:
def aumentar_variavel variavel += 20 if variavel == 30 return end variavel += 40 end variavel = 10 aumentar_variavel p variavel # => 30
No exemplo acima, o comando "return" que est no mtodo 'aumentar_variavel' ser executado se o valor de 'variavel' for igual a 30, como 'variavel' foi declarada como 10 e antes da condio o valor aumentado em 20, a expresso condicional retornar true e assim a condio ser executada, ento o comando 'return' far com que a execuo do mtodo seja "quebrada" e assim, o comando 'variavel += 40' no ser executado. Se voc alterar o valor da declarao de 'variavel', a condio retornar true, e assim, o comando 'return' no ser executado, e sim o comando 'variavel += 40'. O comando "return" no serve somente para quebrar a execuo do mtodo, mas tambm servir para retornar um determinado valor que for utilizado juntamente com ele. Como voc j aprendeu sobre retorno na lio sobre condies, retorno quando o
comando substituido pelo valor de retorno, no caos dos mtodos, o comando de chamar o mtodo ser substituido pelo valor de retorno. Exemplo:
def vinte return 20 end variavel = vinte p vatiavel # => 20 p vinte # => 20
claro que, como o mtodo vinte ser substitudo por '20', eu poderia utiliz-lo de vrias formas, como por exemplo, esta:
def vinte return 20 end variavel = 50 + vinte
Todas as 5 variveis(var1, var2, var3, var4 e var5) tero um mesmo valor em comum, a string "DarkChocobo". Eviando Valores aos Mtodos Tambm possvel enviar determinados valores ao chamar os mtodos. Alguns mtodos necessitam de alguns valores para serem executados corretamente. Para que um o necessite de um valor voc deve, ao declar-lo, declarar tambm variveis locais dentro de um parnteses, logo aps o nome do mtodo(as para isto apenas nomeie as variveis separando-as por vrgulas). Exemplos de mtodos que necessitam de um ou mais valores:
def metodo1(valor) end def metodo2(valor1, valor2, valor3) end
OBS: Cada mtodo pode necessitar de quantos valores for necessrio. Para chamar um mtodo que precisa de algum valor, voc deve determinar este valor logo aps chamar o mtodo (separados por um espao); voc pode usar qualquer tipo de valor. Quando um mtodo necessitar de mais de um valor, voc deve usar vrgulas para selar-los.
Exemplos:
metodo1 1 metodo1 "string" metodo1 [1, "array"] metodo2(1, 2, 3) metodo2(0, "texto", ["array"])
OBS: Note que em alguns exemplos foram usados parnteses e em outros no, no obrigatrio o uso de parnteses ao enviar os valores aos mtodos, porm, usando-os, voc deixa o seu script mais organizado, por isto muito comum encontr-los em exemplos como este. Quando um valor enviado para um mtodo desta forma, o mtodo faz com que as variveis locais que voc declarou tomem o valor dos valores enviados ao mtodo. Exemplo:
def meu_nome(str) p str + "Chocobo" end meu_nome("Dark")
No exemplo acima, a mensagem que ser exibida "DarkChocobo", pois ao chamar o mtodo 'meu_nome' enviando a string "Dark", voc far com que o mtodo 'meu_nome' seja executado considerando que 'str' seja "Dark", e assim 'str + "Chocobo"' ser "DarkChocobo". Outro exemplo de envio de valores aos mtodos:
def juntar_arrays(a, b) return a + b end ary1 = [1, 2, 3, 4] ary2 = [5, 6, 7, 8] p juntar_arrays(ary1, ary2) # => [1, 2, 3, 4, 5, 6, 7, 8]
Aula 7 - Sprites
A classe Sprite representa uma imagem, ela possui vrios mtodos e propriedades.
@var = Sprite.new(viewport) @var.bitmap = RPG::Cache.picture("nome") # RPG Maker XP @var.bitmap = Cache.picture("nome") # RPG Maker VX
No exemplo acima foi considerado o sprite como uma picture, porm ele pode ser um cone, um character, etc. Tudo que for grfico e estiver no jogo. O argumento viewport no obrigratrio, ele est implcito.
H tambm os comandos:
wave_amp (RGSS2) wave_length (RGSS2) wave_speed (RGSS2) wave_phase (RGSS2)
Estes comandos do uma espcie de onda na imagem, a imagem fica ondulada, como o caso nas batalhas.
wave_amp = n => Amplitude da onda. wave_lenght = n => Frequencia da onda. wave_speed = n => Velocidade do movimento. wave_phase = 0~360
A classe Sprite bem til, ele usada em menus,batalhas, windows, etc. Esta classe uma das que voce pode usar de qualquer forma, alm de possuir uma grande quantidade de mtodos, teste modificar no Scene_Title a sprite do ttulo, colocando esses mtodos e efeitos de onda, voce pode consultar outros scripts do maker.
Aula 8 - Plane
A classe Plane capaz de realizar movimentos em imagens, tanto vertical como horizontal. Esta classe, assim como Sprite dependem da Bitmap, portanto para criar a imagem, usamos o mtodo Bitmap, e depois definimos como quisermos, Sprite, Plane, etc.
@var = Plane.new @var.bitmap = Cache.picture("nome")
Esta linha indica que a varivel @sprite um Sprite, porm bastar trocar por isto:
@sprite = Plane.new
Teste o jogo e voce ver que nada mudou... Bem, o legal vem agora! V no def update e depois do super escreva:
@sprite.ox -=2 @sprite.oy += 2
Agora teste e veja que a imagem comea a subir na direo direita, a velocidade o 2, significa que a cada frame a imagem sobe 2 pixels e vai para direita 2 pixels. Basta usar sua criatividade, este comando bem til, e d um efeito muito bom em menus, por exemplo.
Aula 9 - Bitmap
A classe Bitmap serve para ns criamos coisas relacionadas a imagens e grficos, no necessariamente imagens, esta aula fala sobre o comando Bitmap, porem usa como exemplos Sprite e Plane, que sero estudados mais a frente. OBS 1: O Sprite e Plane, podem ser classificados como parentes proximos da Bitmap, porque eles so digamos que, filhos dela, herdam alguns mtodos. Basicamente, uma imagem pode ser carregada, editada, e deletada com cdigos simples e fceis, s saber usar os mtodos. Vamos comear com o sprite. O que um Sprite? So 'filhas' da classe Bitmap, elas so cpias dela, a imagem propriamente dita.
OBS 1: A ultima parte s vlida para o VX, que usa o mtodo Cache.picture. OBS 2: Cache.picture apenas um exemplo, porque alm dele, existe tambm: Cache.animation, Cache.battler, Cache.face.... Para ver s ir ao mdulo 'Cache'. OBS 3: No precisa informar o formato da imagem.
Esses so os mais usados, h outros tambm, como o rect, disposed?, blt... Consule-os no arquivo anexado do RGSS.
Aula 10 - Rect
Nesta aula, vou falar sobre o comando Rect, que serve para criar retngulos. Vamos l! Lembrando que vamos usar uma window como exemplo. Para criar um retngulo, use o cdigo:
@variavel = Rect.new(x, y, largura, altura)
Ou seja, rect significa a varivel em que esta o rect, que no caso @varivel. E cor significa a cor do rect, pode ser Color.new(red,green,blue) ou pelas cores do Window_Base: normal_color, system_color, crisis_color,etc... Ou, desta forma:
self.contents.fill_rect(x, y, largura, altura, cor)
Neste mtodo, voc no precisa criar uma varivel pro rect, o comando j cria um rect com os dados que voc fornece. Podemos tambm usar o gradient_fill_rect, que da um efeito bem legal de gradiente, ele mistura duas cores e forma um grfico:
self.contents.gradient_fill_rect(rect, cor1, cor2)
OBS: Desta forma, ns precisaremos da varivel que representa o Rect. Ou, da outra forma, que no precisa de variveis:
self.contents.gradient_fill_rect(x, y, largura, altura, cor1, cor2)
Neste exemplo, o cdigo cria a janela e o rect. Apenas faa isso e crie um evento com o Cdigo: Window_Jao.new Tentem atribuir um valor para o rect, por exemplo: @largura = 50 * @width / 100. Onde 50 e um valor qualquer e width a largura do rect, e / 100 significa porcentagem. assim que funcionam as barras de HP/SP, basta ver o clculo na Window_Base.
Aula 11 - Viewport
ndice de Tpicos: Tpico 1.0 Sintaxe Tpico 2.0 Mtodos Tpico 3.0 Exemplos A classe Viewport muito importante, ela "fatia" a imagem, ou seja, definimogs qual o tamanho da imagem, altura, largura e posio x/y. Com ela, podemos fazer muitas coisas interessantes, principalmente com sprites e planes.
Todas as formas so iguais, s muda que a segunda precisa de uma varivel que representa Rect.
Se voc testar, vai ver que ficou uma coisa bem louca, basicamente viewports fazem isso. Porm, eu fiz uma demonstrao bem bsica do poder que eles tm. Os viewports fazem basicamente isso: Cortam o objeto com o tamanho que voce decidiu altura e largura, e colocam-no na posio x e y. Para atribuir um viewport a o objeto, s fazer como eu disse:
@objeto = Plane.new(@var_do_viewport) # Lembrando que Plane um exemplo.
O interessante seria misturar tudo como eu fiz, por exemplo, coloquei viewports e Planes no script, que d um efeito muito interessante, no acha? Principalmente se voce mesmo fizer uma imagem bem legal, imagina os efeitos que o viewport e plane podem fazer!
Aula 12 - Windows
Comearemos a estudar sobre as Windows, tambm chamadas de janelas, praticamente so a base dos scripts visuais. Ou seja, sua importncia muito grande. Na figura abaixo, vamos identificar janelas. A partir daqui comearemos a fazer nossos scripts, por mais simples que sejam, mostram que vocs evoluram. Vamos aprender como criar uma janela bsica. Primeiramente devemos saber o que herana. Em uma de nossas aulas falamos um pouco sobre isso. Para criar uma janela devemos fazer herana. Neste caso ser com a Window_Base.
class Teste < Window_Base def initialize super(x,y,altura,largura) refresh end def refresh self.contents.draw_text(0,0,self.width,self.height,texto) end end
Note que h dois mtodos na classe, ou seja, as janelas normalmente utilizam um, mas para organizar usamos dois. Por exemplo, o def initialize serve para ns organizarmos as variveis e opes da janela, e o refresh serve para digitarmos o texto. Toda vez que quisermos criar uma janela, temos que usar herana, sem ela no d! Portanto geralmente usamos a Window_Base como pai da nova classe. Toda window tem que ter a seguinte base:
class Seu_Nome < Window_Base def initialize super(10,10,100,200) end end
No super, apenas substitui as variveis de posio x, posio y, largura e altura por nmeros quaisquer. A base da janela so textos, ou seja, usaremos muito o comando draw_text.
self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon1)
(Exemplo extrado da classe Window_Equip do VX.) Em outras aulas, vimos que alguns mtodos necessitam de valores, tambm chamados de argumentos, devemos seguir esta regra, o mtodo draw_text requer 5 argumentos (que so separados por virgula); posio x, posio y, largura do texto, altura do texto e texto. Onde texto deve estar dentro de aspas, ou seja , uma string. Bom, vamos comear ento a us-las, de uma forma bem simples, mas que d um efeito bem legal de incio. Crie uma classe e escreva o cdigo:
class Window_Jo < Window_Base def initialize super(10,10,300,60) self.contents.draw_text(0,0,300,30,"Digite seu texto aqui!") end end
Isso faz com que automaticamente a janela entre no mapa sem ter que chamarmos, e fica infinitamente l. Teste o jogo e veja a window. Antes de prosseguir, um detalhe, como vimos, na CLASSE da janela, usamos o self. Mas se usarmos em outro script, como no scene map, veremos que vai dar erro, porque o self indica a classe em si, e o RGSS no vai saber diferenciar, portanto tudo que formos fazer com a janela, fazemos na sua VARIVEL. Agora chegaremos a uma parte interessante, o que d vida a janela, os mtodos. Citarei alguns, pois so diversos, estes mtodos so da Window_Base, caso queira ver todos seus mtodos, basta consult-la e ver os seus defs. No def initialize, logo abaixo do super, coloque os cdigos.
self.opacity = 150 self.visible = true self.back_opacity = 10 self.contents_opacity = 150 # # # # opacidade da janela - 0~255 visibilidade da janela opacidade do interior da janela contedo da janela (texto por exemplo)
Esses mtodos, so os responsveis por alterar a esttica da janela, e se voc ver no Window_Base, ela filha da Window que uma classe interna do ruby, ou seja ela est embutida l. Portanto, toda janela criada que possua herana da base poder ter estes mtodos. Em suma:
self.opacity = 0-255 indica a opacidade total da janela (exceto o seu contedo) self.visible = true/false indica se a janela esta ou no visvel self.back_opacity = 0-255 indica a opacidade do interior, e no da borda da windowskin self.contents_opacity = 0-255 indica a opacidade de todo o contedo da janela
Lembrem-se de que voc pode pegar qualquer def (mtodo) da Window_Base e jogar nessa janela, muito aconselhvel voc fazer isso. Podemos concluir que:
1. self.contents_opacity = 0 igual a: self.visible = false porque ambos esto nulos. A diferena que a opacidade total pode-se alterar entre 0 e 255 e a visible totalmente visvel, ou no. 2. Vimos que para criar janelas, precisamos de um super, que indica sua posio x, posio y, largura e altura; 3. Precisamos de herana para que a janela seja criada; 4. Colocar mtodos do script Window e Window_Base; 5. No usar o self num outro script, e sim criar uma varivel; 6. E aprenderemos mais sobre elas na prxima aula, que vai ser sobre Scenes, que envolver as janelas.
Aula 13 - Scenes
O que so Scenes? Scenes so na traduo bruta, um conjunto de windows, em que h interao entre elas. Para que eu uso elas? Bom, por exemplo, a Scene_Menu um conjunto de janelas, que podemos interagir para escolher o que fazer, acessar itens,habilidades,status,salvar,etc... As scenes servem para organizar e facilitar o trabalho dos scripters. T, mas o que eu tenho que fazer? Na verdade voc tem que criar uma Window, e na Scene cham-la atravs de uma varivel correspondente a Window. Bom, para iniciar preciso dizer que Scenes o que chamamos de classe artificial, porque no muda em nada o nome do script ser Scene_Menu ou Cena_Menu (lembrando que se o nome for Cena_Menu teremos que cham-lo sempre com este nome), Scene suponhamos que seja s para orientar. Vamos usar Scenes, ou seja, quase todos scripts que usam interao com Windows, animaes, etc so Scenes, lembrando que h outros nomes no RGSS o nome da classe no importa -, como voc j deve saber, nos orientamos pelo script, pelo seu nome ou nome da class -, portanto, tenha muito cuidado com isso, pode ser que, ele no tenha nome de Scene, mas seja uma Scene ou vice-versa. Como disse, Scenes um nome que s serve para diferenciar ou classificar scripts. Para usar uma Scene, tomarei base o RGSS2 que usa uma classe Base, a Scene_Base, uma coisa que no XP no existia. Se voc estiver usando o VX e quiser criar uma Scene, use a herana < Scene_Base. Depois crie um def initialize para organizar dados parciais, como declarar uma varivel para Windows, depois vem o mtodo main, onde tudo ocorre na Scene, h vrios outros, como o update, no sei dizer ao certo se os mtodos main,initialize e update so oficiais ou so inventados para classificar como o nome Scene e Window. H certos casos que precisamos usar o update para por exemplo, animar uma Scene ou atualizar aps algum mtodo ser chamado. Eu costumo fazer em meus menus uma animao, que servir de exemplo para esta aula... V no def update, tomemos como exemplo a varivel time, que se refere a janela de tempo;
@time.y -= 5 if @time.y <= 366 @time.y = 366 end
Nela, o cdigo @time.y -= 5 significa que ela subir na posio y em velocidade 5, e se a posio y for menor ou igual a 366, ela para em 366, assim como todas outras, isso serve para que se ela for maior/menor que 366, ela no continue subindo eternamente pela tela, e pare na posio 366y.
J as outras, geralmente so criadas por classe, mas podem ser criadas por variveis (isso pode ser um pouco complexo, mas no , basta saber usar argumentos). No vou comentar nas minhas aulas sobre a Selectable, pois no tem muito pra se falar. Nesta vou comear falando da Base, mostrando os comandos. Vamos l! Logo de cara, no inicio do script, voc v o def initialize, e um cdigo dentro dos parnteses, isso chamado argumento, so cdigos que precisam ser especificados quando chamamos uma classe. Ento deduzimos que para chamar a Window_Base precisamos especificar a posio X e Y e a largura e altura da janela. H tambm comandos como 'self.', isto indica que a ao ser feita na prpria classe, neste caso a Window. O exemplo: self.back_opacity = 200 indica que a opacidade da janela ser 200. Uma pergunta, por que especificar com o self e no usando variveis? Simples, porque se usssemos uma varivel, teramos que usar em toda classe filha da base, o self indica que a ao ocorrer com a classe em si, e no com a classe em um devido momento, visto que podemos usar a mesma Window em vrias Scenes, como no caso a Window_Help. T, chega de enrolao, vamos para os mtodos! O mtodo draw_icon e novo no VX, infelizmente no XP no havia. Para desenhar um cone na Window, basta usar: draw_icon(numero do cone, x, y). O numero do cone significa que voc deve especificar o cone, porque como vimos, o cone uma imagem s, feita com vrios cones, o RPG Maker automaticamente divide os cones, ento teremos que contar o cone. O mtodo draw_face, tambm novo no VX, no existe no XP, ele desenha uma face
qualquer, desde que especificada: draw_face(face_name, face_index, x, y) face_name indica o nome do arquivo, que deve ser expresso em aspas,face_index o id da face, vide o numero do cone, e o X e Y nem precisa explicar. O mtodo draw_character desenha o grfico do personagem,
draw_character(character_name, character_index, x, y). A mesma
explicao do draw_face. O mtodo draw_actor_hp(actor, x, y) Desenha o grfico do HP do heri, lembrando que a varivel actor deve ser especificada (eu no sei como no VX, mas no XP : actor = $game_actors[id]). O mtodo draw_currency_value(value, x, y, width) serve para voc escrever o valor exato e atual de uma certa coisa, no caso para Gold, veja que o Gold se refere a
$game_party.gold
Por fim, h o mais conhecido, o draw_text, ele deve ser feito com o self.contents:
self.contents.draw_text(x, y, largura, altura,"texto")
H tambm o opacity, que indica a transparncia da janela, podemos usar tanto o self como uma varivel. OBS: self uma pseudo-varivel, voc no pode usar self em uma Scene, porque no esta especificando qual janela voc quer alterar. Em uma Scene, devemos usar o opacity na varivel que retrata a janela. O z indica a prioridade, quanto maior, mais prioridade ter. E por fim, o visible = true/false indica que quando false, a janela no ser visvel, e quando true, ser.