1 Lição 8.0 - Scenes - A Estrutura 16/2/2012, 18:11
Fetelk13
Membro Honorário I
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:
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.
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á.
- 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
#<AQUI>
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 #
- 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
#<coloque o que quiser aqui>
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á.