Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte no desenvolvimento de jogos


    Lição Especial - Scenes - Dúvidas Mais Comuns

    avatar
    Nothing
    Iniciante
    Iniciante

    Mensagens : 43
    Créditos : 8

    Lição Especial - Scenes - Dúvidas Mais Comuns Empty Lição Especial - Scenes - Dúvidas Mais Comuns

    Mensagem por Nothing em Qua Jan 05, 2011 8:31 am

    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.

      Data/hora atual: Dom Ago 09, 2020 11:59 pm