Update

4 Respostas   152 Visualizações

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

MendigoDoMato

  • *
  • Posts: 40
  • Ouros: 4
Tópico criado em: 27/08/2016 às 16:40

0
O método update não é nada alem de um loop, certo ? qualquer método que seja um loop vai atualizar uma informação, é isso mesmo ?  :será:

Ai vem a duvida, quando eu procuro nos termos do jogo, o def update não tem nenhum comando(que eu tenha visto) que o torne um loop, qual o segredo dele ? É que eu gosto de ter uma class Teste pra testar as coisas( :derp:), queria tirar a duvida porque eu queria que essa minha classe tivesse um update, posso simplesmente criar a classe update e dentro dela um "loop do" ? 

Abraços   :ded:

Resque

Resposta 1: 27/08/2016 às 18:15 - Última modificação por Resque em 27/08/2016 às 18:20

1
Não, o update não é um loop, na verdade existe um loop que chama o update.

rgss_main { SceneManager.run }
---------------------------------------------------
module SceneManager
  def self.run
    DataManager.init
    Audio.setup_midi if use_midi?
    @scene = first_scene_class.new
    @scene.main while @scene
  end
end
---------------------------------------------------
class Scene_Base
  def main
    start
    post_start
    update until scene_changing?   <-----  esse é o loop
    pre_terminate
    terminate
  end
--------------------------------------------------

Exemplo do uso do until:

i = 0
until i == 5
   puts i
   i += 1
end

resultado:

0
1
2
3
4

MendigoDoMato

  • *
  • Posts: 40
  • Ouros: 4
Resposta 2: 28/08/2016 às 00:01 - Última modificação por MendigoDoMato em 28/08/2016 às 00:47

0
Que safado, não acharia nunca...então todo o update de todas as classes esta sendo processado dendro de um loop ?

Mas se eu definir uma "classe teste" que não fede nem cheira, como eu dou a ela um update ?

Posso ,no initialize, criar um loop e dentro dele escrever update e defini-lo depois ?

de qualquer forma...obrigado e um abraço. 

Resque

Resposta 3: 28/08/2016 às 12:10 - Última modificação por Resque em 28/08/2016 às 12:28

0
Os arquivos que contém o código do post anterior, são:
  Main
  SceneManager
  Scene_Base


Se você quer realmente aprender, sugiro que estude todos os arquivos de script do seu RPG Maker, mesmo que você não saiba o que cada linha de código significa, tente entender para o que serve, antes de tudo, você precisa de familiarizar com a estrutura.

Quanto mais você ler todos os arquivos, mais claro as coisas vão ficar.

Referente ao loop, vamos fazer essa sua classe teste exibir no console a mensagem 'atualizando....' enquanto você estiver no mapa do jogo.

Vamos criar a classe com o nosso update.
(Adicione um novo Arquivo com o nome 'Teste' em baixo de Materials ou Materiais se aí estiver em português)
Código: [Selecionar]
class Teste
  def update
    p 'atualizando....'
  end
end

Agora vamos achar a Scene do Mapa: Scene_Map

O primeiro método que a Scene_Map executa, é o start, sabendo disso, vamos criar uma instância da nossa classe dentro do start da Scene_Map:

Código: [Selecionar]
$teste = Teste.new
O que estamos fazendo é, iniciando a nossa classe quando a Scene_Map é iniciada (isso acontece apenas uma vez).

ficou assim:
Código: [Selecionar]
  def start
    super
    SceneManager.clear
    $game_player.straighten
    $game_map.refresh
    $game_message.visible = false
    create_spriteset
    create_all_windows
    $teste = Teste.new

    @menu_calling = false
  end

Agora precisamos exibir a mensagem várias vezes enquanto o Herói estiver no mapa, para isso vamos usar o loop que você perguntou.

Mas aí teremos que criar um loop dentro do update né? Não

a Classe Scene_Map já tem um update próprio, com várias coisas, veja:

Código: [Selecionar]
 
def update
    super
    $game_map.update(true)
    $game_player.update
    $game_timer.update
    @spriteset.update

    update_scene if scene_change_ok?
 end

O que vamos fazer é chamar o update da nossa classe Teste, dentro do update da Scene_Map.

Como eu disse anteriormente o update da Scene_Map já está dentro de um loop, colocando o nosso update da classe 'Teste' lá dentro, ele também estará em loop.

Chame o update da classe 'Teste' dentro do update da classe Scene_Map:
Código: [Selecionar]
$teste.update
O update da Scene_Map ficou assim:

Código: [Selecionar]
 
def update
    super
    $game_map.update(true)
    $game_player.update
    $game_timer.update
    @spriteset.update
    $teste.update
   
    update_scene if scene_change_ok?
  end

Agora abra o seu jogo e veja que no console vai aparecer varias vezes o texto: 'atualizando....' enquanto você permanecer no mapa.

MendigoDoMato

  • *
  • Posts: 40
  • Ouros: 4
Resposta 4: 30/08/2016 às 10:56

0
hummm, você só aproveitou um outro update...show ! Vou seguir a sua dica de ler com mais atenção as outras classes.

valeu cara ! Um abraço !