Suporte no desenvolvimento de jogos


    Aula Avançada 1: Criando Scenes Avançadas

    MickeyRocknn
    MickeyRocknn
    Iniciante
    Iniciante

    Mensagens : 71
    Créditos : 9
    Cash : 0

    Aula Avançada 1: Criando Scenes Avançadas Empty Aula Avançada 1: Criando Scenes Avançadas

    Mensagem por MickeyRocknn em Sab Abr 28, 2012 6:37 pm

    Vi Esta Aula No Aprendiz RPG É Vou Disponibilizar Aqui. Criador: Lucaswf1

    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!



    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!


    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:


    class Scene_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 in 0..3
    if FileTest.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.


    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.

    [link=http://www.4shared.com/file/80699999/83916f44/aula1av_im.html]Imagens aqui![/link]

    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! Successful


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


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


    class Scene_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 in 0..3
    if FileTest.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
    end
    end

      Data/hora atual: Qua Jul 17, 2019 8:27 pm