Comando do Menu (Checkpoint)

2 Respostas   180 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

Darkiino

  • *
  • Posts: 38
  • Ouros: 23
Tópico criado em: 19/12/2017 às 17:16

Estou usando o RMVX Ace e estou usando um script de checkpoint, em que ao morrer você volta onde o checkpoint foi salvo pela ultima vez dãh, com isso gostaria de adicionar no menu uma opção de voltar ao ultimo check point, em outras palavras, chamar o game over, eu consegui criar o comando, mas não consigo chamar a Scene_Gameover, não sou muito experiente com RGSS3, se alguem puder ajudar ficarei muito agradecido!!  :ok:

Segue o código que usei na Window_MenuCommand:
Código: [Selecionar]
  #--------------------------------------------------------------------------
  # * Adição de comandos próprios
  #--------------------------------------------------------------------------
  def add_original_commands
    add_command("Checkpoint", :gameover)
    end

Gking

  • *
  • Posts: 32
  • Ouros: 38
  • No Pain No Gain
Resposta 1: 04/01/2018 às 14:12

Esse código apenas cria o comando, para ele fazer algo você precisa associá-lo à um método:

Spoiler
[close]
Obs.: Não testei.

Gabriel

Resposta 2: 04/01/2018 às 17:27 - Última modificação por Revali em 04/01/2018 às 17:31

OBS: Não vou colocar em spoilers porque eles diminuem o tamanho da caixa de códigos.

Vou levar em consideração que você entenda o básico de programação e de que não ficará perdido se eu for um pouco mais direto:

Precisamos trabalhar em duas classes para fazer tudo funcionar corretamente. Primeiro vamos ter em mente quais são essas classes que iremos utilizar. Se a ideia é adicionar a opção no menu principal, teremos que trabalhar com a janela de comandos do menu principal e na própria cena do menu principal. Respectivamente estas são: Scene_Menu e Window_MenuCommand.

Vamos então começar o trabalho alterando e incrementando a classe da janela de comandos do menu (Window_MenuCommand) para criamos o comando dentro dela.

Criaremos então um código limpo onde iniciaremos primeiramente dentro da classe Window_MenuCommand adicionando um alias para incrementar(sem modificar o que já existe) o método make_command_list. Dentro desse método, chamaremos um novo método onde iremos criar a opção dentro da janela.
Código: [Selecionar]
class Window_MenuCommand < Window_Command
 
  alias new_command make_command_list
  def make_command_list
    new_command
    add_checkpoint_command
  end
 
end

Agora, criaremos o comando:
Código: [Selecionar]
class Window_MenuCommand < Window_Command
 
  alias new_command make_command_list
  def make_command_list
    new_command
    add_checkpoint_command
  end
 
  def add_checkpoint_command
    add_command("Carregar",   :checkpoint)
  end
 
end
Explicação rápida:
Código: [Selecionar]
add_command("nome", :symbol, condition)
#"nome" = Nome do comando no menu
#:symbol = Simbolo que usaremos pra identificador o comando futuramente
#condition = não é obrigatório, mas usá-se caso deseje adicionar alguma condição para que o comando seja ativável ou não.

A parte na classe da janela está pronta. Agora iremos trabalhar com a classe da cena do menu. Dentro dela, adicionaremos um alias no método create_command_window. Neste método, associaremos o comando que criamos na janela com um método que criaremos dentro dessa classe (cena) e nele iremos finalmente criar a ação que desejamos que o comando realize.
Código: [Selecionar]
class Scene_Menu < Scene_MenuBase
 
  alias new_command create_command_window
  def create_command_window
    new_command
    @command_window.set_handler(:checkpoint, method(:command_checkpoint))
  end
 
end
Explicação rápida:
Código: [Selecionar]
@command_window.set_handler(:symbol, method(:method))
#:symbol = O mesmo de antes, lembra? É com ele que iremos associar o comando da janela com o método a seguir
#:method = O método onde realizaremos a ação que ocorrerá quando o comando for ativado

Vamos então terminar tudo criando o último método, que já foi referenciado pelo nome na etapa anterior.
Código: [Selecionar]
class Scene_Menu < Scene_MenuBase
 
  alias new_command create_command_window
  def create_command_window
    new_command
    @command_window.set_handler(:checkpoint, method(:command_checkpoint))
  end
 
  def command_checkpoint
    #adicione a ação que você deseja
  end
 
end
Você mencionou que gostaria de chamar o game over, mas te pergunto, esse sistema de checkpoint não cria um save? Se criar, não seria mais fácil em vez de chamar o game over, chamar um load do save?

Mas enfim, eis aqui o resultado final seguindo o seu pedido do comando chamar a cena de game over:
Código: [Selecionar]
class Window_MenuCommand < Window_Command
 
  alias new_command make_command_list
  def make_command_list
    new_command
    add_checkpoint_command
  end
 
  def add_checkpoint_command
    add_command("Carregar",   :checkpoint)
  end
 
end

class Scene_Menu < Scene_MenuBase
 
  alias new_command create_command_window
  def create_command_window
    new_command
    @command_window.set_handler(:checkpoint, method(:command_checkpoint))
  end
 
  def command_checkpoint
    SceneManager.call(Scene_Gameover)
  end
 
end
Talvez o código sirva de exemplo para você fazer o que achar melhor com o comando.

Qualquer dúvida basta dizer.  :ok: