Forums » RGSS

Lição 8.0 - Scenes - A Estrutura

    • 683 posts
    2 de junho de 2015 18h07min35s ART

    Finalmente começaremos a falar sobre a Classe MAIS importante do RGSS. Mas porque a mais importante? porque as Scenes são responsáveis por dar vida aos códigos. Os objetos principais de um game são:

    - Tela de Título 
    - Mapas 
    - Menus 
    - Batalhas 
    - Tela de Game Over

    Observe a imagem abaixo:

     

    Mas como assim, Dar vida??

    As Scenes são classes pré-definidas onde a sua composição torna possível a criação de movimento no mapa por exemplo, a exibição do menu quando apertamos uma tecla, quando entramos em batalha, e por ae vai. Primeiramente vamos entender como funciona uma Scene, para depois exeplicá-la com mais ênfase. Sua estrutura é a seguinte:


    #definimos a classe:
    class Scene_nomedascene
    #definimos o procedimento principal
    def main
    #delaramos os objetos que serão usados na scene
    @var = objeto.new
    @var2 = objeto2.new

    #Aqui, iniciamos a estrutura de "funcionamento"
    #da Scene, iniciando a transição dos gráficos

    Graphics.transition
    #A partir daqui, tudo que acontece dentro do
    #Scene vai estar nesta parte, iniciamos um loop

    loop do
    # Atualizamos a tela de jogo
    Graphics.update
    # Atualizar a entrada de teclas
    Input.update
    #Aqui colocamos TUDO que quisermos que
    #Aconteça no Scene


    # Abortar o loop caso a scene tenha sido alterada
    if $scene != self
    break
    end
    end

    #Congelamos o Scene, para iniciar 
    #uma nova transição (de uma para a outra)

    Graphics.freeze
    #E destruímos todos os objetos que foram
    #declarados

    @var.dispose
    @var2.dispose
    end
    end


    Vejamos de uma forma mais limpa:

    Código:
    class Scene_nomedascene
      def main
        @var = objeto.new
        @var2 = objeto2.new
        Graphics.transition
        loop do
          Graphics.update
          Input.update
          #
          if $scene != self
            break
          end
        end
        Graphics.freeze
        @var.dispose
        @var2.dispose
      end
    end


    Observe que, dentro do loop, estamos atualizando os gráficos e a entrada de teclas. É exatamente aqui que fazemos as coisas acontecerem. Tudo que estiver dentro deste loop ira acotecer, de acordo com a programação, como se fosse um "filme". Observe também que, se houver uma mudança de de Scene(if $scene != self - self ->Ela mesma) o loop é quebrado(break) e tudo que estiver abaixo ocorre, como a parada nos gráficos e a destruição dos objetos que foram criados.

    Como já aprendemos que o RGSS é uma POO, para facilitar a vida não vamos encher a estrutura loop de linhas, vamos direcionar para um procedimento, no caso, o procedimento mais comum é o update.

    No lugar do nosso # vamos por o update e, logo abaixo do end do procedimento main vamos criar o procedimento update.

    Código:
    class Scene_nomedascene
      def main
        @var = objeto.new
        @var2 = objeto2.new
        Graphics.transition
        loop do
          Graphics.update
          Input.update
          update
          if $scene != self
            break
          end
        end
        Graphics.freeze
        @var.dispose
        @var2.dispose
      end
      def update
      #
      end
    end


    Agora, tudo que for acontecer em nossa Scene partirá do procedimento update. Ele foi intencionalmente chamado assim por referência, para facilitar saber o que cada procedimento faz. Como qualquer classe, As classes Scene podem ter quantos procedimentos forem necessários, e possuir o procedimento initialize, que por padrão, é sempre o primeiro procedimento da classe a ser executado(salvo a primeira Scene do game, que por padrão a Classe Main chama o procedimento$scene.main).

    Se você der uma olhada nas Scenes padrão do RGSS, verá que muitas delas como a Scene_Menu, possuem o procedimento initialize.
    Lá em cima eu disse que podemos declarar objetos, mas que objetos??

    Na maioria das Scenes, são declaras as Janelas, As imagens(em forma de Sprites ou Planes) e as Vars.
    Tudo que você vê em funcionamento num game é possível por causa desse loop do, que se você leu a aula passada, sabe que significa "faça enquanto". Enquanto está neste Scene, enquanto está dentro do loop, tudo acontece, como o movimento dos eventos no mapa, o movimento do fog, o cursor que muda de cor no menu, a própria movimentação do cursor, e infinitas outras coisas de nossos games, como as batalhas, a seleção de heróis e monstros, o uso de skills com animações.

    Este é apenas o início do início deste assunto. Na próxima aula, iniciaremos a contrução de uma Scene, para que você entenda melhor o seu funcionamento.

    Até lá.