O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Menu Simples - Versão 1.0

Iniciado por cristianoforce, 18/01/2013 às 15:40

18/01/2013 às 15:40 Última edição: 31/10/2018 às 22:02 por King Gerar
Menu Simples
  :cool:




[box class=catbg2]Ficha Técnica[/box]
[box class=catbg1]Nome: Menu Simples do Cristiano
Lag gerado: Desprezível
Compatibilidade: Boa
Engines Aplicáveis: RPG Maker XP
Customizável: Sim
Requer Recursos Extras: Não
Criador: Cristiano ([user]cristianoforce[/user])
Versão: 1.0
[/box]




[box class=catbg2]Explicações do Script[/box]
[box class=catbg1]Um menu de funcionalidade simples para usuários que queiram fazer jogos que não exijam menus muito complexos. Ele possui quatro opções: Itens, Salvar Jogo, Carregar Jogo e Finalizar. As opções levam a diferentes cenas do próprio RTP.

Algumas coisas podem ser modificadas no módulo do script:

  #==============================================================
  # Modificações do usuário
  #==============================================================

  LOAD_OK = 1 # ID da switch que desabilita o comando de carregar jogo (se true)
  SIZE_WINDOW = 200 # Tamanho da janela de Menu
  SEM_FUNDO = true # Decide se o menu irá abrir com fundo ou sem
  OPACITY = 180 # Opacidade da janela
  ITEM_ICON = "032-Item01" # Ícone da opção Item
  SAVE_ICON = "030-Key02" # Ícone da opção Salvar 
  LOAD_ICON = "031-Key03" # Ícone da opção Carregar
  FINAL_ICON = "020-Accessory05" # Ícone da opção Finalizar

[/box]




[box class=catbg2]Imagens[/box]
[box class=catbg1]
Alguma(s) imagem(ns) demonstrativa(s):

[/box]




Código

#==============================================================================
# Menu Simples Cristiano
# Criador: cristianoforce
# Versão: 1.0
# Engine: RPG Maker XP
#------------------------------------------------------------------------------
# Menu simples com 4 opções para uso rápido
#==============================================================================

module Cris
  #==============================================================
  # Modificações do usuário
  #==============================================================
  LOAD_OK = 1 # ID da switch que desabilita o comando de carregar jogo (se true)
  SIZE_WINDOW = 200 # Tamanho da janela de Menu
  SEM_FUNDO = true # Decide se o menu irá abrir com fundo ou sem
  OPACITY = 180 #Opacidade da janela
  ITEM_ICON = "032-Item01" # Ícone da opção Item
  SAVE_ICON = "030-Key02" # Ícone da opção Salvar  
  LOAD_ICON = "031-Key03" # Ícone da opção Carregar
  FINAL_ICON = "020-Accessory05" # Ícone da opção Finalizar
end

#==============================================================================
# Window_Icon_Command
#------------------------------------------------------------------------------
# Esta é a janela que exibe as escolhas (com ícones)
#==============================================================================

class Window_Icon_Command < Window_Command

  def initialize(width, commands, icons)
    @icons = icons
    super(width, commands)
  end
  
  #--------------------------------------------------------------------------
  # Desenhar Item
  #
  #     index : índice
  #     color : cor do texto
  #--------------------------------------------------------------------------
  
  def draw_item(index, color)
    self.contents.font.color = color
    bitmap = RPG::Cache.icon(@icons[index])
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(4, 32 * index + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    rect = Rect.new(32, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
end

#==============================================================================
# Scene_Menu
#------------------------------------------------------------------------------
# Janela do Menu
#==============================================================================

class Scene_Menu
  
  #--------------------------------------------------------------------------
  # Inicialização dos Objetos
  #
  #     menu_index : posição inicial do cursor de comando
  #--------------------------------------------------------------------------
  
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
   
  #--------------------------------------------------------------------------
  # Processamento Principal
  #--------------------------------------------------------------------------
  
  def main
    # Se o fundo for o mapa
    if Cris::SEM_FUNDO
       @spriteset = Spriteset_Map.new
    end 
    # Criar janela de comando
    s1 = $data_system.words.item
    s2 = "Salvar Jogo"
    s3 = "Carregar Jogo"
    s4 = "Finalizar"
    @command_window = Window_Icon_Command.new(Cris::SIZE_WINDOW, [s1, s2, s3, s4], [Cris::ITEM_ICON, Cris::SAVE_ICON, Cris::LOAD_ICON, Cris::FINAL_ICON])
    @command_window.index = @menu_index
    @command_window.x = (640 - @command_window.width) / 2
    @command_window.y = (480 - @command_window.height) / 2
    @command_window.opacity = Cris::OPACITY
    # Se o número de membros do Grupo de Heróis for 0
    if $game_party.actors.size == 0
      # Desabilar as janelas de Item
      @command_window.disable_item(0)
    end
    # Se Salvar for Proibido
    if $game_system.save_disabled
      # Desabilitar Salvar 
      @command_window.disable_item(1)
    end
    # Se Carregar o jogo for proibido
    if $game_switches[Cris::LOAD_OK] == true
      # Desabilitar carregar jogo
      @command_window.disable_item(2)
    end
    # Executar transição
    Graphics.transition
    # Loop principal
    loop do
      # Atualizar a tela de jogo
      Graphics.update
      # Atualizar a entrada de informações
      Input.update
      # Atualizar Frame
      update
      # Abortar loop se a tela for alterada
      if $scene != self
        break
      end
    end
    # Preparar para transiçõa
    Graphics.freeze
    # Exibição das janelas
    @command_window.dispose
    @spriteset.dispose unless Cris::SEM_FUNDO == false
  end
  
  #--------------------------------------------------------------------------
  # Atualização do Frame
  #--------------------------------------------------------------------------
  
  def update
    # Atualizar janelas
    @command_window.update
    # Se a janela de comandos estiver ativo: chamar update_command
    if @command_window.active
      update_command
      return
    end
  end
  
  #--------------------------------------------------------------------------
  # Atualização do Frame (Quando a janela de Comandos estiver Ativa)
  #--------------------------------------------------------------------------
  
  def update_command
    # Se o botão B for pressionado
    if Input.trigger?(Input::B)
      # Reproduzir SE de cancelamento
      $game_system.se_play($data_system.cancel_se)
      # Alternar para a tela do mapa
      $scene = Scene_Map.new
      return
    end
    # Se o botão C for pressionado
    if Input.trigger?(Input::C)
      # Se o comando for outro senão Salvar, Carregar, Fim de Jogo e o número de Heróis no
      # Grupo for 0
      if $game_party.actors.size == 0 and @command_window.index < 1
        # Reproduzir SE de erro
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Ramificação por posição do cursor na janela de comandos
      case @command_window.index
      when 0  # Itens
        # Reproduzir SE de OK
        $game_system.se_play($data_system.decision_se)
        # Alternar para a tela de Itens
        $scene = Scene_Item.new
      when 1  # Salvar
        # Se Salvar for proibido
        if $game_system.save_disabled
          # Reproduzir SE de erro
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Reproduzir SE de OK
        $game_system.se_play($data_system.decision_se)
        # Alternar para a tela de save
        $scene = Scene_Save.new
      when 2 # Carregar
        # Reproduzir SE de OK
        $game_system.se_play($data_system.decision_se)
        # Alternar para a tela de load
        $scene = Scene_Load.new
      when 3  # Finalizar
        # Reproduzir SE de OK
        $game_system.se_play($data_system.decision_se)
        # Alternar para a tela de Fim de Jogo
        $scene = Scene_End.new
      end
      return
    end
  end
end

#==============================================================================
# Scene_Save
#------------------------------------------------------------------------------
# Esta classe processa o Save
#==============================================================================

class Scene_Save
  
  #--------------------------------------------------------------------------
  # Processamento de Decisão
  #--------------------------------------------------------------------------
  alias on_decision_new on_decision
  def on_decision(filename)
    on_decision_new(filename)
    # Mudar para a tela do Menu
    $scene = Scene_Menu.new(1)
  end
  
  #--------------------------------------------------------------------------
  # Processo de Cancelamento
  #--------------------------------------------------------------------------
  
  alias on_cancel_new on_cancel
  def on_cancel
    on_cancel_new
    # Mudar para a tela do Menu
    $scene = Scene_Menu.new(1)
  end
end

#==============================================================================
# Scene_Load
#------------------------------------------------------------------------------
# Esta classe processa a tela de Continuar
#==============================================================================

class Scene_Load
  
  #--------------------------------------------------------------------------
  # Cancelando o Processamento
  #--------------------------------------------------------------------------
  
  alias on_cancel_new on_cancel
  def on_cancel
    on_cancel_new
    # Reproduzir SE de cancelamento
    $game_system.se_play($data_system.cancel_se)
    # Mudar para a tela do Menu
    $scene = Scene_Menu.new(2)
  end
end

#==============================================================================
# Scene_End
#------------------------------------------------------------------------------
# Esta classe processa a tela de Game Over
#==============================================================================

class Scene_End
  
  #--------------------------------------------------------------------------
  # Atualização do Frame
  #--------------------------------------------------------------------------
  
  alias update_new update
  def update
    update_new
    # Se o botão B for pressionado
    if Input.trigger?(Input::B)
      # Reproduzir SE de cancelamento
      $game_system.se_play($data_system.cancel_se)
      # Alternar para a tela de Menu
      $scene = Scene_Menu.new(3)
      return
    end
  end
  
  #--------------------------------------------------------------------------
  # Processamento na Escolha do Comando Cancelar
  #--------------------------------------------------------------------------
  
  alias command_cancel_new command_cancel
  def command_cancel
    command_cancel_new
    # Reproduzir SE de OK
    $game_system.se_play($data_system.decision_se)
    # Alternar para a tela do Menu
    $scene = Scene_Menu.new(3)
  end
end





[box class=catbg2]Agradecimentos[/box]
[box class=catbg1]
  • Madajuv - Ajuda com a inserção de ícones através da classe filha da Window_Command.
    [/box]

Isso :P, renda-se ao RGSS, bom está bem simples, mas eu dei uma olhada no code ele está bem bonitin ^^, parabéns ficou legal mesmo olhei tudo e nada a adicionar ou tirar *--*.

Citação de: Raizen online 18/01/2013 às 15:57
Isso :P, renda-se ao RGSS, bom está bem simples, mas eu dei uma olhada no code ele está bem bonitin ^^, parabéns ficou legal mesmo olhei tudo e nada a adicionar ou tirar *--*.

kkkkkkkkkkkkkk. Eu ainda estou tentando aprender este bagulho :c
Um dia eu chego no nível de vocês (eu espero ;-; kkkkkkkk)

Obrigado por comentar Raizen, fico feliz que tenha gostado *-*

Parabéns me parece que é novato na vida scripter, é isso ai força pois somos meio solitários....:D niguém ajuda no começo.....Frase de Felix Blayder....Script dado não se olha os Bug's.

Citação de: Komuro Takashi online 11/02/2013 às 00:08
Parabéns me parece que é novato na vida scripter, é isso ai força pois somos meio solitários....:D niguém ajuda no começo.....Frase de Felix Blayder....Script dado não se olha os Bug's.

Sou um novato mesmo, e estou apanhando bastante kkkkkkk. Mas espero um dia poder dominar um pouco melhor o RGSS, apenas para eu poder me ajudar no RPG Maker mesmo =x kkkkkkk.

Obrigado pelo comentário.  :ok:

Oi, eu sou novo aqui... acabei de me registrar.
Só queria saber se tem como deixar esse menu sobreposto as imagens porque ele fica em baixo delas.
Muito bom script.
(Não sei nada de programação em ruby e nem em nd. Só um pouco em C++)
Já agradeço.

Caraca, muito bom cara ! To estudando Ruby, e isso irá ajudar bastante !
SE A VIDA TE DER OPORTUNIDADES, JOGUE-AS FORA!