Forums » RGSS

Aula Avançada 1: Criando Scenes Avançadas

    • 683 posts
    4 de junho de 2015 13h07min49s ART

    Posted Image


    Posted Image

    Introdução
    Para os que leram a versão antiga desta aula, aproveitem para relê-la pois ela foi completamente recriada. Com essa, inauguramos o curso avançado de RGSS!

    Posted Image


    Posted Image

    Criando a Estrutura Inicial
    Na aula original havíamos criado uma Scene_Menu, mas ela ficou muito longa e por isso vamos dar uma encurtada. Nosso objetivo agora será criar uma Scene_Title, ou seja, uma tela de título animada com imagens. Para começar, vamos criar uma Scene_Title idêntica à original do RMXP. Ai vocês me perguntarão, "ta, mas posso simplesmente copiar e colar?" respondo que sim, porém como estamos estudando e também para tirar a ferrugem, vou esplicar tudo!

    Posted Image


    Posted Image

    Carregando o jogo
    Logo que o jogo roda, main(la abaixo na lista de scripts) é executado e por padrão, abre a Scene_Title, por questões de funcionalidade, adicione ja no método main da Scene_Title, os recursos para o battle_test (teste de batalha), para isso, basta colocar:

    classScene_Title   def main     if $BTEST       battle_test       return     end


    A variável $BTEST é um booleano(switch) que é ativado quando fazemos um teste de batalha, como estamos criando uma Scene que ja existe, não precisamos recriar métodos que são iguais aos originais, por isso, o método chamado pelo comando (battle_test) não é necessário que implementemos.

    Continuando no método main, vamos carregar todas as variáveis do sistema do jogo, esses comandos são padronizados então você pode copiar a vontade, sempre, a 1ª Scene que for executada no jogo deve conter os seguintes comandos logo no início:

        $data_actors        = load_data("Data/Actors.rxdata")     $data_classes      = load_data("Data/Classes.rxdata")     $data_skills        = load_data("Data/Skills.rxdata")     $data_items        = load_data("Data/Items.rxdata")     $data_weapons      = load_data("Data/Weapons.rxdata")     $data_armors        = load_data("Data/Armors.rxdata")     $data_enemies      = load_data("Data/Enemies.rxdata")     $data_troops        = load_data("Data/Troops.rxdata")     $data_states        = load_data("Data/States.rxdata")     $data_animations    = load_data("Data/Animations.rxdata")     $data_tilesets      = load_data("Data/Tilesets.rxdata")     $data_common_events = load_data("Data/CommonEvents.rxdata")     $data_system        = load_data("Data/System.rxdata")     $game_system =Game_System.new


    Feito as bases, vamos continuar com os comandos padrão, vamos agora adicionar a imagem de fundo, ela é a imagem que esta configurada no sistema.

        @sprite=Sprite.new     @sprite.bitmap = RPG::Cache.title($data_system.title_name)


    Depois criamos o menu de opções do jogo.

        @command_window=Window_Command.new(192,["Novo Jogo","Continuar","Sair"])


    Verificamos agora se há algum save na pasta do jogo, para então habilitar ou não a opção de continuar.

        @continue_enabled=false     for i in0..3       ifFileTest.exist?("Save#{i+1}.rxdata")         @continue_enabled=true       end     end     if@continue_enabled       @command_window.index =1     else       @command_window.disable_item(1)     end


    Paramos os ME e BGS e tocamos a BMG do título.

        $game_system.bgm_play($data_system.title_bgm)     Audio.me_stop     Audio.bgs_stop


    Após tudo isso, basta executar a transição da tela seguido do nosso popular "loop do" e por fim, usamos os "dispose" pra não ficar coisa a mais na tela.

        Graphics.transition     loop do       Graphics.update       Input.update       update       if $scene !=self         break       end     end     Graphics.freeze     @command_window.dispose     @sprite.dispose


    Termine o código e rode o jogo, vai rodar a tela inicial com o menu no canto da tela.

    Posted Image


    Posted Image

    Adicionando opções via Pictures
    Vamos começar agora o conteúdo em si, crie 3 imagens como as disponíveis no link abaixo ou pegue essas mesmo.

    Imagens aqui!

    Adicione agora, um novo sprite na sua Scene, depois da criação do menu, adicione:

        @option=Sprite.new#criamos um sprite chamado option     @option.bitmap = RPG::Cache.picture("menu"+@command_window.index.to_s)#definimos que a imagem é a     #picture chamada menu + o número da opção atualmente selecionada!

    Coloque o devido dispose no lugar.

    Ao rodar o jogo, a nova imagem ficará estática na tela, para torná-la dinâmica, basta adicionar o comando de definição do bitmap no método update. Como o método update ja existe e não queremos editá-lo todo, vamos usar um alias!

      alias rgss_aula_update update   def update     @option.bitmap = RPG::Cache.picture("menu"+@command_window.index.to_s)     rgss_aula_update   end


    Rode o jogo, seu menu por pictures irá acompanhar o menu original, basta agora esconder nosso menu original e deixar esse "fake" baseado em pictures visível, para isso, depois da criação do menu, mude a posição x dele para um valor maior que 640, assim ele vai ficar fora da tela, por exemplo "@command_window.x = 10000"!

    Ja temos uma tela de título razoável, altere agora a imagem de fundo da forma convencional, apenas para fins estéticos! ^^

    Posted Image


    Posted Image

    Adicionando Extras
    Criada a estrutura básica da title, você pode usar seus conhecimentos em rgss para adicionar efeitos, por exemplo, adicione uma fog.

    Posted Image


    Posted Image

    Código Final
    Ao final do trabalho, obtive o seguinte resultado

    classScene_Title   def main     if $BTEST       battle_test       return     end     $data_actors        = load_data("Data/Actors.rxdata")     $data_classes      = load_data("Data/Classes.rxdata")     $data_skills        = load_data("Data/Skills.rxdata")     $data_items        = load_data("Data/Items.rxdata")     $data_weapons      = load_data("Data/Weapons.rxdata")     $data_armors        = load_data("Data/Armors.rxdata")     $data_enemies      = load_data("Data/Enemies.rxdata")     $data_troops        = load_data("Data/Troops.rxdata")     $data_states        = load_data("Data/States.rxdata")     $data_animations    = load_data("Data/Animations.rxdata")     $data_tilesets      = load_data("Data/Tilesets.rxdata")     $data_common_events = load_data("Data/CommonEvents.rxdata")     $data_system        = load_data("Data/System.rxdata")     $game_system =Game_System.new     @sprite=Sprite.new     @sprite.bitmap = RPG::Cache.title($data_system.title_name)     @command_window=Window_Command.new(192,["Novo Jogo","Continuar","Sair"])     @command_window.x =10000     @continue_enabled=false     for i in0..3       ifFileTest.exist?("Save#{i+1}.rxdata")         @continue_enabled=true       end     end     if@continue_enabled       @command_window.index =1     else       @command_window.disable_item(1)     end     @fog=Plane.new(@viewport1)     @fog.bitmap = RPG::Cache.fog("004-Shade02",0)     @fog.blend_type =1     @fog.opacity =150     @option=Sprite.new     @option.bitmap = RPG::Cache.picture("menu"+@command_window.index.to_s)     $game_system.bgm_play($data_system.title_bgm)     Audio.me_stop     Audio.bgs_stop     Graphics.transition     loop do       Graphics.update       Input.update       update       if $scene !=self         break       end     end     Graphics.freeze     @command_window.dispose     @sprite.dispose     @option.dispose     @fog.dispose   end     alias rgss_aula_update update   def update     @option.bitmap = RPG::Cache.picture("menu"+@command_window.index.to_s)     @fog.oy -=3     @fog.ox -=1     rgss_aula_update   endend

    Posted Image


    Posted Image

    Tags de Busca

    • Scenes
    • Pictures
    • Title