Templo RPG Maker
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir para baixo  Mensagem [Página 1 de 1]

Fetelk13

Fetelk13
Membro Honorário I
Membro Honorário I
OLÁ AMIGOS MAKERS !!

Fiquei muito tempo afastado do RMXP. Me aprofundei no estudo do Game Maker, enquanto estudava DotNet pra entrar num novo emprego. Entrei no emprego, e agora tudo mudou. Tô tendo que estudar programação 16 horas por dia e tudo que antes era divertido passou a ser "Pra hora que der". Acabei descobrindo algumas coisas interessantes sobre programação que apenas o Ruby possui, e resolvi compartilhar, já que é algo que muitos perguntam.... Vamos lá.

Nas primeiras aulas eu disse que o RMXP é uma linguagem orientada a objeto que suporta herança.

O que isso significa??

Significa que as Classes "Filho" herdam das Classes "Pai" seus métodos, procedimentos, funções e variáveis. Por exemplo:

Todas as Classes de Janela, em suas declarações, seus nomes vem precedidos de um sinal de <(menor) e o nome da Classe da qual ela está herdando. Veja:

Código:
class Window_Selectable < Window_Base

Veja que a classe Window_Selectable é filha de Window_Base. Isso significa que todos os filhos de Window_Selectable também herdarão a Classe Window_Base. Isso é algo simples de ver na Classe Window_MenuStatus. Ela é Filha de Window_Selectable, porém ela invoca o método draw_actor_name, proveniente da Classe Window_Base.

Sim, mas e dae??

A programação orientada a objeto foi feita para que escrevamos menos código, pois, usando a herança, podemos apenas invocar métodos e funções das classes pai sem ter que reescrevê-los. Porém, algumas linguagens como C, C++ e Java(e agora Ruby) permitem que você complemente um método/procedimento/função sem ter que reconstruí-lo(claro que depende da necessidade, se o metódo fará algo completamente diferente do original, você tem que reconstruir) e sem ter que "alcançar" a Classe pai. ou seja, as modificações podem ser Globais(atingir a Classe pai) ou locais(Atingir apenas a Classe atual). Para isso usamos um método muito visto nos scripts MADE-IN-USA, o método Alias.

O método Alias remomeia método/procedimento/função em tempo de execução, de forma a não mais direcionar as chamadas para o original, e sim para o novo método/procedimento/função que será escrito para complementar o antigo. Vamos ver um exemplo simples?

Abra um projeto no RMXP, Abra o Editor de Scripts e insira uma nova sessão antes do Main. Dentro dela declare isto:

Código:
class Window_Base < Window
  alias draw_actor_name_old draw_actor_name
  def draw_actor_name(actor, x, y)
    self.contents.font.color = disabled_color
    self.contents.draw_text(x + 2, y + 2, 120, 32, actor.name)
    draw_actor_name_old(actor, x, y)
  end
end

Observe que eu estou direcionando para a Classe Window_Base. Com isso, esta modificação alcançará todas as classes que forem "filhas" dela(no nosso caso, Todas as classes Window_).

Rode o projeto e abra o menu. Observe como ficou o efeito de "sombra" no nome dos heróis. Passeie pelo menu e olhe todas as janelas que mostram o nome dos heróis. Em todas, o efeito de "sombra" aparece.
Aparece pois modificamos a Classe MOR, de onde todas as outras classes são filhas. Modifique agora o Script que escrevemos para este:

Código:
class Window_MenuStatus < Window_Selectable
  alias draw_actor_name_old draw_actor_name
  def draw_actor_name(actor, x, y)
    self.contents.font.color = disabled_color
    self.contents.draw_text(x + 2, y + 2, 120, 32, actor.name)
    draw_actor_name_old(actor, x, y)
  end
end

Rode o jogo. Observe que, apenas a tela principal, a MenuStatus, possui o efeito, e todas as outras não.

Mas e dae, pra quê isso vai me servir??

Bem, o exemplo mostra tudo, se você desejar fazer uma alteração global, voce pode iniciar novamente a classe, como foi feito no exemplo, remomear o método/procedimento/função usando o método alias como foi usado no exemplo, e modificá-lo a vontade.
Vale lembrar que o Ruby, assim como outras linguagens OOP, não permite dois método/procedimento/função com o mesmo nome, então quando usar Alias, lembre-se de dar a ele um nome que não exite ainda no seu projeto, ou você receberá a mensagem Stack level to deep, indicando que o método/procedimento/função está duplicado.

A sintaxe do método alias é essa:

alias nome_novo nome_antigo

Um método pode ser renomeado várias vezes dentro do mesmo projeto, desde que seguidas as normas acima citadas.
Algumas programações OOP, como o DotNet(minha linguagem de trabalho agora) permite o polimorfismo, ou seja, eu posso ter vários métodos dentro de uma classe com o mesmo nome, diferenciando-os pelos parametros passados ou pelo tipo de parametro. Neste caso, a Engine da linguagem se encarrega de descobrir qual dos metodos será chamado.

Acho que por hoje é só. Deu pra esclarecer o que é e como funciona o método alias e como podemos tirar proveito do que já existe no RMXP pra criarmos nossos proprios scripts.

Espero que eu tenha mais tempo para escrever mais aulas, pois o assunto RGSS é realmente muito extenso.

Até a proxíma.

http://elementosrpgmakerbr.forumeiros.com/forum

BrunoFox

BrunoFox
Administrador
Administrador
+REP, gostei desta lição ^^ !

https://templorpgmakerbr.forumeiros.com

Fetelk13

Fetelk13
Membro Honorário I
Membro Honorário I
Ainda bem que você gostou ^^

http://elementosrpgmakerbr.forumeiros.com/forum

Conteúdo patrocinado


Ver o tópico anterior Ver o tópico seguinte Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos