Resolvi abrir um tópico especial sobre Scenes por vários motivos. Graças ao Maker Ewertonsjn
e várias PMs recebidas, percebi que muitos tiveram dificuldade de
entender o funcionamento de uma Scene. Neste Tópico vou Explicar os
problemas e dúvidas mais comuns. Vamos lá.
1º - Eu criei uma janela, como faço para mostrá-la no menu?
No procedimento def main você deve declarar uma variável
que será a classe da janela. Procure escrever um nome que você
identifique depois, para não ter problemas. Exemplo:
@janela_dinheiro = Window_Gold.new
Veja que eu chamei-a de janela_dinheiro, para facilitar caso eu precise dela depois. mas ATENÇÂO !, todo Scene possui esta estrutura:
Código:
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
A declaração de qualquer objeto deve ser feita ANTES deste código.
2º - Como faço para mostrar uma imagem no fundo do menu?
A mesma regra das janelas se aplica ás imagens. Se você quer mostrar uma imagem estática, declare um Sprite, Assim:
@img_fundo = Sprite.new
@img_fundo.bitmap = RPG::Cache.picture("nomedaimagem")
Se você deseja mostrar uma imagem dinâmica, que se moverá, declare um Plane, assim:
@img_fundo = Plane.new
@img_fundo.bitmap = RPG::Cache.panorama("nomedaimagem")
O RPG::Cache pode ser usado para qualquer pasta de imagens do projeto.
A regra de onde deve ser declarada também é igual a das janelas.
3º - Eu quero que o Mapa com o herói apareça no fundo, é possível?
Sim, porém é uma declaração fixa. O nome da Variável dever ser
este, por conveniência da classe Window. Você deve declarar o Spriteset,
que é a visualização do mapa. Assim:
@spriteset = Spriteset_Map.new
E agora o mapa aparece, como se o menu fosse transparente. Ah,
você deve abrir espaço no menu para que o fundo apareça, ou você vai
achar que deu erro. ;D
4º - Eu consegui colocar a janela, mas eu quero mudar o lugar onde ela está posicionada, é possível?
Sim, é possível. Para posicionar a janela basta você configurar, logo abaixo da declaração inicial da janela, os valores X e Y dela, Exemplo:
@janela_dinheiro = Window_Gold.new
@janela_dinheiro.x = 160
@janela_dinheiro.y = 32
Lembre-se, Valores que:
X menor que 0 e maior que 640
Y menor que 0 e maior que 480
-
Farão com que a janela suma.
E Valores que:
X mais a largura da janela seja maior que 640
Y mais a altura da janela seja maior que 480- Farão com que a janela apareça cortada.
5º - Legal, Tudo funcionou. Mas agora, quando eu saio do menu, as janelas continuam lá !! ao que fazer ??
Todo e qualquer objeto declarado deve ser destruído. COMO ASSIM??
Quando declaramos um variável, abrimos uma área na memória, que
fica ali guardando aquilo que colocamos. Por isso, se você não "destruir"as
janelas que criou, elas continuarão alí, até que o sistema precise
daquela memória, e veja que ela está sobrando, ae ele vai lá e derruba
elas. Como você não quer esperar pelo sistema, é bem simples. Lembra-se
do código padrão das Scenes?? este:
Código:
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
Logo depois de Graphics.freeze, você deve escrever assim:
@nome_da_variavel.dispose
Isso vale pra tudo, Janelas, Imagens, Spriteset. Vou demonstrar com as dos exemplos acima:
@janela_dinheiro.dispose
@img_fundo.bitmap.dispose
@img_fundo.dispose
@spriteset.dispose
Repare que eu dei um Dispose na função Bitmap da var @img_fundo. Em alguns casos, é necessário, mas nem sempre.
Fazendo isso, suas janelas desaparecerão ao mudar do menu para o mapa, ou para outro Scene.
6º - PUXA !! Tudo funciona agora. Porém eu fiz uma janela com
um texto variável, como o da janela de Help, mas o texto não muda. O que
há de errado?
Todo e qualquer objeto que precise ser mudado dentro de uma Scene
depende de uma atualização. Se você leu com atenção a aula 8.0, eu falo
que o procedimento update é responsável pela atualização de tudo que há
na Scene. então, dentro do def update declare o update das variáveis, assim:
@janela_dinheiro.update
@img_fundo.update
@spriteset.update
E pronto. Todas as mudanças necessárias à variável serão executadas.
Acho que por enquanto é só. tem mais dúvidas? algo que eu esqueci?
poste aqui ou me mande uma PM. Terei o maior prazer em esclarecer.
Abraço a todos e obrigado mais uma vez.
e várias PMs recebidas, percebi que muitos tiveram dificuldade de
entender o funcionamento de uma Scene. Neste Tópico vou Explicar os
problemas e dúvidas mais comuns. Vamos lá.
1º - Eu criei uma janela, como faço para mostrá-la no menu?
No procedimento def main você deve declarar uma variável
que será a classe da janela. Procure escrever um nome que você
identifique depois, para não ter problemas. Exemplo:
@janela_dinheiro = Window_Gold.new
Veja que eu chamei-a de janela_dinheiro, para facilitar caso eu precise dela depois. mas ATENÇÂO !, todo Scene possui esta estrutura:
Código:
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
A declaração de qualquer objeto deve ser feita ANTES deste código.
2º - Como faço para mostrar uma imagem no fundo do menu?
A mesma regra das janelas se aplica ás imagens. Se você quer mostrar uma imagem estática, declare um Sprite, Assim:
@img_fundo = Sprite.new
@img_fundo.bitmap = RPG::Cache.picture("nomedaimagem")
Se você deseja mostrar uma imagem dinâmica, que se moverá, declare um Plane, assim:
@img_fundo = Plane.new
@img_fundo.bitmap = RPG::Cache.panorama("nomedaimagem")
O RPG::Cache pode ser usado para qualquer pasta de imagens do projeto.
A regra de onde deve ser declarada também é igual a das janelas.
3º - Eu quero que o Mapa com o herói apareça no fundo, é possível?
Sim, porém é uma declaração fixa. O nome da Variável dever ser
este, por conveniência da classe Window. Você deve declarar o Spriteset,
que é a visualização do mapa. Assim:
@spriteset = Spriteset_Map.new
E agora o mapa aparece, como se o menu fosse transparente. Ah,
você deve abrir espaço no menu para que o fundo apareça, ou você vai
achar que deu erro. ;D
4º - Eu consegui colocar a janela, mas eu quero mudar o lugar onde ela está posicionada, é possível?
Sim, é possível. Para posicionar a janela basta você configurar, logo abaixo da declaração inicial da janela, os valores X e Y dela, Exemplo:
@janela_dinheiro = Window_Gold.new
@janela_dinheiro.x = 160
@janela_dinheiro.y = 32
Lembre-se, Valores que:
X menor que 0 e maior que 640
Y menor que 0 e maior que 480
-
Farão com que a janela suma.
E Valores que:
X mais a largura da janela seja maior que 640
Y mais a altura da janela seja maior que 480- Farão com que a janela apareça cortada.
5º - Legal, Tudo funcionou. Mas agora, quando eu saio do menu, as janelas continuam lá !! ao que fazer ??
Todo e qualquer objeto declarado deve ser destruído. COMO ASSIM??
Quando declaramos um variável, abrimos uma área na memória, que
fica ali guardando aquilo que colocamos. Por isso, se você não "destruir"as
janelas que criou, elas continuarão alí, até que o sistema precise
daquela memória, e veja que ela está sobrando, ae ele vai lá e derruba
elas. Como você não quer esperar pelo sistema, é bem simples. Lembra-se
do código padrão das Scenes?? este:
Código:
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
Logo depois de Graphics.freeze, você deve escrever assim:
@nome_da_variavel.dispose
Isso vale pra tudo, Janelas, Imagens, Spriteset. Vou demonstrar com as dos exemplos acima:
@janela_dinheiro.dispose
@img_fundo.bitmap.dispose
@img_fundo.dispose
@spriteset.dispose
Repare que eu dei um Dispose na função Bitmap da var @img_fundo. Em alguns casos, é necessário, mas nem sempre.
Fazendo isso, suas janelas desaparecerão ao mudar do menu para o mapa, ou para outro Scene.
6º - PUXA !! Tudo funciona agora. Porém eu fiz uma janela com
um texto variável, como o da janela de Help, mas o texto não muda. O que
há de errado?
Todo e qualquer objeto que precise ser mudado dentro de uma Scene
depende de uma atualização. Se você leu com atenção a aula 8.0, eu falo
que o procedimento update é responsável pela atualização de tudo que há
na Scene. então, dentro do def update declare o update das variáveis, assim:
@janela_dinheiro.update
@img_fundo.update
@spriteset.update
E pronto. Todas as mudanças necessárias à variável serão executadas.
Acho que por enquanto é só. tem mais dúvidas? algo que eu esqueci?
poste aqui ou me mande uma PM. Terei o maior prazer em esclarecer.
Abraço a todos e obrigado mais uma vez.