ajuda2

2 Respostas   174 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

MendigoDoMato

  • *
  • Posts: 40
  • Ouros: 4
Tópico criado em: 20/08/2016 às 16:43 - Última modificação por Raizen em 24/08/2016 às 13:56

0
Eu to com o tempo quebrado e sempre que posso tento ver um pouco sobre script,sabe ?
então...quando eu acho que estou entendendo e tento fazer uma coisa muiiito simples e sempre da errado  :facepalm: eu só quero entender a mecânica antes de tentar fazer alguma coisa, mas tá difícil :T.T:   .... então... minhas duvidas bestas são:

1- tudo o que está dentro do 'def initialize' é um método de update ?

2- escrever $game_player é o mesmo que escrever Game_player.new, certo ? e por conter o cifrão eu posso chamar o $game_player de qualquer lugar, certo ? Mas, porque quando escrevo ,por exemplo, $game_player.x ou .screen_x ele diz que o método não esta definido ? Na verdade eu entendo que realmente não esta definido...mas a momentos em que eles são usados e ao mesmo tempo não encontro as definições dos mesmo em nenhum lugar, o meu grande problema esta em como mencionar alguma coisa...seja lá o que for... :derp:

uso o rpg maker vx ace, um abraço   


Raizen

  • Administrador
  • *
  • Posts: 3224
  • Ouros: 3192
  • Medalhas Vencedor do Protótipo Premiado Participante notável do evento "A Estação das Luzes do Norte" Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!
Resposta 1: 24/08/2016 às 15:30

1
1- tudo o que está dentro do 'def initialize' é um método de update ?
Nada que está no initialize é do update, assim essas nomenclaturas, update, main, initialize... São apenas nomes de funções/métodos que o Ruby usa.

Assim como na maioria das linguagens, o Ruby tem um nome "reservado" para iniciar uma classe, quando você instancia a classe, desse modo:
@aclass = ClasseA.new

o método new, irá chamar automaticamente um método de inicialização que para o Ace é o initialize, mas se usar o main ele deveria funcionar da mesma maneira.

Pense na seguinte forma, pensar fora da caixa  :rickas:

Ruby é uma linguagem orientada a objetos, como basicamente tudo em Ruby é objeto, temos também classes que funcionam sozinhas, que são inicializadas com o programa RPG Maker, essa classe faz basicamente o seguinte:

Código: [Selecionar]
Chamo classe x, a, z

A cada frame eu chamo o método update


Então o def update que você diz, nada mais é que um método que está inserido em algum lugar, as vezes dentro de uma classe visível no RPG Maker, as vezes não, que está sendo chamada a cada frame do programa. Então você tem que separar as duas coisas, lembrar que não é só porque estou colocando def update que algo vai atualizar, e sim que tem uma função por trás dele que está fazendo isso, então nada no initialize será atualizado, a menos que você queira  :rickas:


2- escrever $game_player é o mesmo que escrever Game_player.new, certo ? e por conter o cifrão eu posso chamar o $game_player de qualquer lugar, certo ? Mas, porque quando escrevo ,por exemplo, $game_player.x ou .screen_x ele diz que o método não esta definido ? Na verdade eu entendo que realmente não esta definido...mas a momentos em que eles são usados e ao mesmo tempo não encontro as definições dos mesmo em nenhum lugar, o meu grande problema esta em como mencionar alguma coisa...seja lá o que for... :derp:

$game_player não é o mesmo que Game_player.new  :rickas:

É algo parecido com o que expliquei acima, ambos são objetos, porém um você está pegando a classe e chamando um método pertencente a ela, e o outro é um objeto que você criou que foi criado uma instância dessa classe.
Isso para explicar em detalhes é um pouco complicado, eu tenho uma aula aqui (talvez o link esteja quebrado porque estou respondendo do trabalho, mas depois eu arrumo :) )
https://centrorpg.com/index.php?topic=6630.0

O que acontece é que você tem um objeto que é uma instância do Game_player, e ela foi atribuido a variável $game_player.

o cifrão é o tipo de variável que ele é, no caso global, e portanto pode ser usado em qualquer classe. A questão principal do $game_player.x não ser lido externamente, é pelo fato de que o atributo dele não está publico. Em outras linguagens o fato dele estar público ou não, é decidido na declaração dessa variável, no Ruby como não é necessário ter declaração, temos que indicar se ele é público de outros modos.

Se colocar,

attr_accessor  :x

dentro da classe Game_Player, você está indicando que a variável de instância possa ser lido e modificado externamente,
attr_reader  :x
Nesse caso que possa ser apenas acessado.

Essa é uma variável interna da classe, e você está deixando ela ser utilizada como um atributo da instância que você criou :).

Bom acho que compliquei um pouco, mas isso tem que ir aprendendo aos poucos, qualquer coisa sobre o que falei só mandar.

MendigoDoMato

  • *
  • Posts: 40
  • Ouros: 4
Resposta 2: 25/08/2016 às 15:57

0
Então quando eu uso $game_player.x por exemplo, o ".x" não é um método, é uma variável que o jogo permite que eu use, quando ele diz " attr_reader :x " ele me permite ler essa informação usando o ".x" ? E olhando as classes eu observei que ha termos sem o attr, porem usando a mesma estrutura <:termo>, isso também é um attr ? 

já agradeço pelo o que me explicou anteriormente, é um bocado de informação, mas eu to achando bem interessante