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

RGSS3 - Aula 6: Objetos e variáveis de classe

Iniciado por Brandt, 04/01/2014 às 17:04

04/01/2014 às 17:04 Última edição: 04/01/2014 às 17:19 por Masked
[box class=titlebg]RGSS3 - Aula 6: Objetos e variáveis de classe[/box]

por Masked

[box class=titlebg]Introdução[/box]

Fala pessoal! Voltei a fazer aulas de RGSS3, agora com um novo design, bem mais organizado.

Essa aula vai ser sobre objetos e variáveis de classe, talvez vocês e perguntem:
'variáveis de classe? A aula de variáveis já não passou?'.

A resposta é  SIM, já passou sim, mas lembram que eu disse que iria explicar apenas três tipos, os mais comuns? Para quem não lembra, (estude mais!) os três são: global ($variavel), de instância (@variavel) e local (variavel)

[box class=titlebg]Índice[/box]



[box class=titlebg]Objetos[/box]

[box class=titlebg]O que são[/box]
Os objetos são basicamente tudo no Ruby.
Por exemplo, um número é um objeto, assim como um texto, um operador, uma estrutura condicional...
Tudo isso são objetos, já que são derivados de classes, que, por sua vez, também são objetos! Até mesmo a classe 'Object' é um objeto. (É estranho pensar nisso  :x--x:)

Então, podemos pensar que um objeto no Ruby é como uma coisa qualquer na vida real.
Exemplo:
Lápis é um objeto. E com o lápis podemos fazer algumas determinadas coisas, por exemplo... escrever.
'escrever' é uma função do objeto lápis, no Ruby, chamamos as funções de um objeto de método.

Acho que deu para entender, e já vou puxar o exemplo do método, como o método 'method' (que controla os métodos de um objeto) está na classe 'Object', ele pode ser usado em qualquer coisa no Ruby.
É isso mesmo, se um método está definido na classe 'Object', ele vale para tudo, afinal, qualquer coisa é um objeto!



[box class=titlebg]Criando um objeto[/box]
Criar um objeto é algo bastante simples, que pode ser resumido a uma linha de código:

object = Object.new


É muito simples, certo?
Mas... e se nós criássemos um objeto de uma classe existente?

Agora sim começa a ficar interessante!

Vamos criar um objeto de uma classe de janela, vejamos:

- Primeiro, vamos decidir qual janela usar... Eu vou usar a class Window_Base, mas pode usar qualquer uma à sua escolha.

- Agora, vamos ao script da janela, precisamos saber quais argumentos usaremos no método de criação! Esses são os mesmos argumentos requeridos no método 'initialize' da classe escolhida, no meu caso, esse é o método:

def initialize(x, y, width, height)
    super
    self.windowskin = Cache.system("Window")
    update_padding
    update_tone
    create_contents
    @opening = @closing = false
  end


Os argumentos requeridos são quatro: 'x', 'y', 'width' e 'height'

- Agora, vamos descobrir para que serve cada argumento, saber inglês ajuda MUITO nessa hora, por exemplo, 'width' significa largura, em inglês, e 'height' é altura.

É claro que se quiserem podem pedir ajuda para um conhecido meu, o tio Google, mas é mais seguro saber a língua, pois às vezes o meu amigo se confunde um pouco...

Enfim, vamos ao caso, os argumentos x e y são dois argumentos muito usados para classes visuais (Sprites, Windows, Bitmaps...), para indicar as posições horizontal e vertical, respectivamente. (x é horizontal e y é vertical)

Então, temos os argumentos e a classe, agora é só montar a linha, que ficaria mais ou menos assim:

@window = Window_Base.new(150, 150, 100, 100)


Claro que os valores dos argumentos ficam à sua escolha, lembre-se, eles usam a medida px, ou seja, os números representam um número de píxels, lembre-se também que o x e o y indicam a posição da ponta superior esquerda da janela.

Agora, no final, use essa linha em um 'chamar script' e ponha o evento para rodar e... Temos uma janela em branco na posição 150 , 150, com tamanho 100x100!

[box class=titlebg]Propriedades[/box]
Propriedades são valores de um objeto.
Por exemplo, o X e o Y, assim como o width e o height são propriedades das Windows, essas propriedades definem a posição e o tamanho da janela, mas temos muitas outras propriedades na classe Window, por exemplo:

[well]windowskin
Refere-se ao bitmap usado como windowskin.

As especificações de skin são quase idênticas às da versão anterior (VX).

contents
Refere-se ao bitmap usado para o conteúdo da janela.

visible
A visibilidade da janela. Se for TRUE, a janela é visível. Por padrão, esse valor é TRUE.

arrows_visible
A visibilidade das setas de rolamento. Se for TRUE, as setas serão visíveis. Por padrão, esse valor é TRUE.

z
A camada da janela. Quanto maior o valor, mais camadas acima a janela estará.

Se vários objetos tiverem a mesma coordenada z, o objeto criado mais recentemente ficará por cima.

Por padrão, esse valor é 100.

opacity
A opacidade da janela (0-255). Valores fora de alcance serão corrigidos automaticamente. Por padrão, esse valor é 255.

back_opacity
A opacidade do fundo da janela (0-255). Valores fora de alcance serão corrigidos automaticamente. Por padrão, esse valor é 192.

contents_opacity
A opacidade do conteúdo da janela (0-255). Valores fora de alcance serão corrigidos automaticamente. Por padrão, esse valor é 255.

openness
A abertura da janela (de 0 até 255). Valores fora de alcance serão corrigidos automaticamente.

Mudando esses valores de 0 (fechado completamente) até 255 (aberto completamente), é possível criar uma animação da janela abrindo e fechando. Se a abertura for menor que 255, o conteúdo da janela não será mostrado. Por padrão, esse valor é 255.

tone
O tom do fundo da janela, deve ser um Tone (veremos mais para a frente).[/well]

Enfim, se você leu pelo menos metade da lista, deve ter percebido para que servem propriedades, para controlar o objeto, você controla a posição, tamanho, camada, cor...


[box class=titlebg]Variáveis de Classe[/box]

[box class=titlebg]O que são[/box]
As variáveis de classe são um tipo de variável que fica entre as variáveis globais e de instância.

As globais, são compartilhadas por todos os objetos, as de instância, por um único objeto, e as de classe, por todos os objetos da mesma classe.

Então se você modificar a variável de classe 'a' no objeto 'x', que é da classe 'Z', a variável de classe 'a' no objeto 'y', que também é a classe 'Z', vai mudar também.

[box class=titlebg]Usando uma variável de classe[/box]
As variáveis de classe são criadas com '@@', então uma variável @@variavel seria uma variável de classe.
Para dar um exemplo da função dessas variáveis, vamos criar uma classe, vou chamar ela de 'Exemplo':

class Exemplo
end


Agora vamos adicionar uma variável de classe nela:

class Exemplo

@@variavel = 0

end


E, por fim, para podermos manipular essa variável, iremos criar um método que altera seu valor e um que retorna, é quase como um attr_accessor:

class Exemplo

@@variavel = 0

def variavel=(n)
@@variavel = n
end

def variavel
return @@variavel
end

end

obj1 = Exemplo.new

obj2 = Exemplo.new

# Escrevendo os valores iniciais das variáveis de classe em cada um dos objetos:

puts obj1.variavel
puts obj2.variavel

# Agora, vamos mudar o valor da variável usando o obj1:

obj1.variavel = 10

# Para verificar, vamos escrever o valor da variável nos dois objetos:

puts obj1.variavel  #=> 10
puts obj2.variavel  #=> 10


Se você testou (é só colar o código em um script em branco e executar o jogo) deve ter visto que, na janela de depuração, aparecem primeiro os número 0 e 0, que são os valores da variável em cada objeto, 0 é o valor padrão da variável '@@variavel' para objetos da classe 'Exemplo'.

Depois, estão escritos os números 10 e 10, 10 é o valor que atribuímos à variável 'variavel' do objeto 'obj1', e mesmo que tenhamos mudado o valor da variável só para o 'obj1', o valor da variável no 'obj2' mudou também, afinal, é isso que fazem as variáveis de classe!
~ Masked

Continua, Continua
Serio, eu sempre leio as aulas para poder ir cada vez mais alem Masked, está fazendo um bom trabalho.

Opa, valeu pelo comentário Ds, já posto minha aula 7 aqui, só postei na MRM, tinha esquecido que não tinha posto aqui ainda  :derp:
~ Masked