O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Aprendendo RGSS do zero Aula 1

Iniciado por chrollo, 15/03/2013 às 09:52

Olá pessoal, estou aqui para iniciar uma série de aulas de RGSS.
Note que quando falo RGSS, não estou especificando qual, visto que
todos os três têm muita coisa em comum, tudo que faço num, posso fazer
noutro, com pouquíssimas exceções. A grande diferença deles é que cada
versão utiliza um "sistema de classes" diferentes, ou seja, a forma a qual
as classes são feitas. Por exemplo, no RGSS1 não há uma classe base para scenes,
já presente no RGSS2, enquanto que neste não há classes gerenciadoras de
procedimentos, presente no RGSS3.

Bom, na primeira aula vamos ver um pouco de tudo.

- Introdução

Caso você não saiba nada de linguagem de programação, saiba que RGSS é a linguagem
Ruby utilizada no RPG Maker. Um código ou script é um conjunto de instruções
que o programa usa para transformar em "ações". Para fazer uma janela aparecer e
sumir, utiliza-se eles.

Saiba também que um script é lido de cima para baixo e linearmente, ou seja,
linha por linha, se houver um erro de programação numa linha e eventualmente
causar um loop, a próxima linha não será lida e executada.

Antes de tudo saiba onde ver a lista de scripts. É um ícone de um papel com um lápis
(RMVX Ace), porém em todas as versões pode-se abri-lo com a tecla F11. Outra informação
importante é o fato dos scripts serem lidos de cima para baixo, não, não é uma repetição
do que disse antes, me refiro ao fato do programa ler script por script de cima para baixo,
isso significa que você não pode por um script que faz referência ou o modifica acima
pois ele ainda não foi lido! Por exemplo, não dá para por o script Scene_Menu acima de
Scene_Base pois esse faz o uso de herança deste.

- Começando

Primeiro vamos saber o que cada coias é. O editor facilita nossas vidas dando cor
a cada elemento da linguagem. Aqui vão as cores:


  • Verde: Comentário, não é lido pelo interpretador, geralmente é deixado como instruções.
  • Azul: Palavras reservadas da linguagem, não podendo ser usadas como variáveis.
  • Azul claro: Operadores.
  • Azul escuro: Classes ou métodos.
  • Roxo: Strings, basicamente textos.
  • Preto: Identificadores. São os nomes das classes, variáveis e métodos.
  • Vinho: Números.
  • Laranja: Símbolos.

- As variáveis

As variáveis são os elementos mais importantes do RGSS e de qualquer
linguagem de programação. Não quero complicar o conceito, mas entenda
elas como uma folha de papel a qual pode ser escrita qualquer coisa.
O seus valores podem ser de qualquer coisa, ou objeto, sendo específico.
A função da variável é armazenar valores.

Vamos a um breve exemplo.
Abra o editor e logo acima do script Vocab, insira um novo script em branco.
Nele escreva o seguinte código:
msgbox "10" # Use print "10" no RGSS1 e RGSS2
exit


O código acima faz com que seja exibida a mensagem de aviso com o texto 10.
Atenção, você pode também por 10 sem aspas, assim deixando de ser string e virando
um número (Integer). Mas não é indicado pois quando se trata de mensagens, deve-se
usar textos (Strings).

Note que msgbox e exit são métodos, veremos eles mais adiante.
Agora vamos usar uma variável para armazenar o valor e depois exibir a mensagem
com seu valor:
var = "10"
msgbox var
exit


Na primeira linha nós declaramos a variável, ou seja, criamos e damos um valor
a ela, no caso uma string. Isso é feito da seguinte forma:
nome_da_variável = valor


Atenção, não se pode dar um nome a um identificador, no caso a variável, com espaços,
usa-se o "underline". Em seguida o operador igual e o valor. Veremos o valor a seguir.

- Os valores das variáveis

Um valor é um objeto, tudo em Ruby é objeto, ou seja, instância de uma classe,
para não complicar entenda que cada valor tem seus atributos, propriedades e métodos.
Não posso usar o método de dividir em uma string, mas posso usá-lo em um número.
Da mesma forma, não posso usar o método de trocar um caractere numa string por outro
num número.

Aqui estão alguns valores:

String: Textos, são delimitados pelo operador "" (aspas), devem ter começo e fim,
ou seja, "texto é errado, pois todo o resto do script estará dentro da string.
ex: "Texto"

Número inteiro (Integer): São os números inteiros, nada a acrescentar.
ex: 50

Número decimais (Float): São os números decimais separados por um ponto.
ex: 10.69

Listas (Arrays): Tipo de variáveis que armazena vários valores em si.
ex: [10,20,30,"oi",58.69]

Boolean: Tem apenas dois valores, verdadeiro ou falso.
ex: true, false

Note que há vários outros tipos, você mesmo pode criar o seu, geralmente com o uso
de classes.

- Os tipos de variáveis

Agora vamos conhecer como as variáveis são classificadas:

Locais: Variáveis que só funcionam no escopo local.
var = "10"
msgbox var
def metodo
    var = "20"
    return var
end
msgbox metodo


Veja que agora elas têm valores diferentes. Uma é diferente da outra.

Classe: Variáveis que funcionam em toda classe ou num escopo de classe.
@var = "10"
msgbox @var
def metodo
    #var = "20"
    return @var
end
msgbox metodo


Para tornar uma variável de classe basta adicionar @ como prefixo.

Globais: Variáveis que funcionam em todo escopo de jogo.

Um exemplo é a variável game_switches que é uma lista. Pode-se usá-la
em qualquer script. Para torná-la global adiciona $ como prefixo.

Faça um teste criando um evento e chame o script:
if $game_switches[1] == true
   msgbox "Switch ativada"
else
   msgbox "Switch desativada"
end


Constantes: Variáveis que servem apenas para consulta, iniciam-se com letra maiúscula, têm escopo global.
PI = 3.14


- Exemplo

Agora que sabemos identificar o que é cada coisa, fica muito mais fácil de trabalhar.
Vamos começar editando uma string, a do título, especificamente. Para isso vamos ao
script Scene_Title. Na linha 92:
def create_command_window
    @command_window = Window_TitleCommand.new
    @command_window.set_handler(:new_game, method(:command_new_game))
    @command_window.set_handler(:continue, method(:command_continue))
    @command_window.set_handler(:shutdown, method(:command_shutdown))
end


Perceba a menção ao Window_TitleCommand, o .new indica a criação dele. Isso quer dizer que
será criada esta classe, vamos então à ela.

Na linha 34 há o seguinte trecho:
def make_command_list
    add_command(Vocab::new_game, :new_game)
    add_command(Vocab::continue, :continue, continue_enabled)
    add_command(Vocab::shutdown, :shutdown)
end


Perceba a sequência "Vocab::_nome_", o Vocab é um módulo, você pode confirmar isso ao vê-lo
no editor, ele é o primeiro script. Logo de cara você verá module Vocab.

Um módulo é uma livraria onde se armazena variáveis e métodos, diferente das classes os módulos
são somente para leitura e consulta.

O operador :: indica a consulta em si do módulo, neste caso as variáveis são new_game, continue
e shutdown. Na linha 140 você verá o seguinte trecho:
def self.new_game;    command(18);  end   # Novo Jogo
def self.continue;    command(19);  end   # Continuar
def self.shutdown;    command(20);  end   # Sair


As linhas poderiam ser escritas da seguinte forma:
def self.new_game # Novo Jogo
    command(18)
end
# ....


Você deve estar confuso agora, vamos em breve veremos os métodos.
O importante agora é notar este command(18), ele faz referência a um texto
específico do Database, neste caso o de "Novo Jogo". Vamos alterá-lo para
"Novo Teste". Deixe assim essas linhas:
def self.new_game;    "Novo Teste";  end   # Novo Jogo
def self.continue;    command(19);  end    # Continuar
def self.shutdown;    command(20);  end    # Sair


Dê OK e teste o jogo. Viu que o nome na janela mudou?
Isso aconteceu porque substituímos uma string por outra, um texto por outro,
não poderíamos substituir um texto por um número ou outra coisa!

Agora faça um teste modificando também os comandos "Continuar" e "Sair".