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:
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.
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! ^^
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
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
Tags de Busca
제주OP exceeded my expectations with their holistic spa therapies. The perfect place to unwind on Jeju Island.
I recommend 오피가이드 to anyone in search of serenity. The lounge area is the perfect escape.
Simplifying Choices: 오피가이드 - Simplifies the process of choosing OP services.
The holistic well-being focus at 오피스타 is exactly what I needed.
Stress melts away with 출장마사지. Their therapists create a calming environment and deliver massages that leave you refreshed.
For trustworthy business information, I always turn to 대밤 주소.
I had the most amazing experience at 강남오피. It's a place I will return to again and again.
즐달 - A place where you can explore, relax, and create unforgettable memories.
I always turn to 부산비비기 for a top-notch massage in Busan.
Relaxation meets productivity at 달리머넷's innovative workspaces.
Explore diverse genres effortlessly with 누누티비.
Celebrated a memorable year-end gathering at 속초노래방. The fun and laughter never stopped!
I found my favorite massage spot through 오피타임. It's a hidden treasure.
Don't miss a beat of South Korea's nightlife rhythm, thanks to 오피가이드's comprehensive event listings.
I'm impressed by the constant innovation of 오피가이드.
The graphics on 에볼루션사이트 are outstanding. A visual treat!