PortalPortal  InícioInício  FAQFAQ  BuscarBuscar  Registrar-seRegistrar-se  Conectar-se  

Compartilhe|

Alucard_2's Classroom 1: Comandos básicos de RGSS2

Ver o tópico anterior Ver o tópico seguinte Ir em baixo
AutorMensagem
Alucard_2
avatar
Membro Especial
Membro Especial

Masculino Postagens : 6
Data de inscrição : 29/01/2010


Ver perfil do usuário
MensagemAssunto: Alucard_2's Classroom 1: Comandos básicos de RGSS2 Ter Jul 27, 2010 6:15 pm

Olá meus caros membros! Hoje, finalmente estou postando a tão esperada 1ª aula de RGSS!

Nesta aula irei ensina-los os comandos básicos do RGSS2, para poderem ter uma idéia e uma base para estudar algum script.

Quais são os comandos básicos?

Eis uma simples lista dos comandos básicos do RGSS em geral:

Citação :

class: É o comando que inicia uma classe, como uma scene ou window.
Por exemplo: "class Scene_Menu" indica que a partir dali será iniciado como será a classe Scene_Menu.

def: Este comando define um processo.
Por exemplo: "def chamar_menu" define como vai ser e o que vai acontecer no processo "chamar_menu".

if: Indica uma condição, de que caso seja o que estiver após o if, o processo abaixo do if será executado.
Por exemplo:
Código:

if Input.trigger?(Input::B)
  chamar_menu
end
Esse comando diz que caso a tecla B seja pressionada, o processo "chamar_menu" será executado.

elsif: Faz parte do comando if, com a mesma função, porém não precisa de end.
Nota: Este comando deve estar DENTRO do comando if, senão ele não terá efeito.
Por exemplo:
Em vez de usar este modo:
Código:

if Input.trigger?(Input::B)
  chamar_menu
end
if Input.trigger?(Input::C)
  chamar_menu_de_itens
end
if Input.trigger?(Input::A)
  $scene = Scene_GameOver.new
end
Você pode encurtar com o elsif:
Código:

if Input.trigger?(Input::B)
  chamar_menu
elsif Input.trigger?(Input::C)
  chamar_menu_de_itens
elsif Input.trigger?(Input::A)
  $scene = Scene_GameOver.new
end

unless: Tem a função exatamente contrária do if. O if quer dizer "se for", já o unless quer dizer "enquanto não for".
Por exemplo:
Código:

unless $game_party.members.size > 0
  print "Não há membros no grupo"
end
Isso quer dizer o seguinte: enquanto o número de membros no grupo NÃO for maior que 0, aparecerá a mensagem "Não há membros no grupo".

module: Um comando simples, parecido com o def e o class, porém ele não define um comando nem uma classe, ele
simplesmente define o que estiver dentro dele, ele facilita os outros scripts e comandos para acessar certas variáveis.
Por exemplo:
Código:

module variaveis
  Var_1 = 123
  Var_2 = "script"
  Var_3 = $game_variables[0]
end

def chamar_menu
  if variaveis::Var_1 == 123
    $scene = Scene_Menu.new
  elsif variaveis::Var_1 == variaveis::Var_2
    $scene = Scene_Item.new
  elsif variaveis::Var_3 == variaveis::Var_3
    $scene = Scene_End.new
  end
end

end: Eis aqui o comando mais utilizado de toda programação RGSS, a função dele é terminar um comando básico.
Ou seja, para cada comando (class, def, if, etc...) deve-se usar um "end" quando ele acaba.
Por exemplo:
Código:

def chamar_menu
  $scene = Scene_Menu.new
end

Pondo em prática

Prática: Comando module

Vamos começar de uma maneira bem simples: crie um script acima do Main.
Por enquanto, não veremos o efeito dele, mas logo você entenderá.
Escreva, neste script novo, dentro dos comandos dele, o seguinte:
Código:

module Opções_do_Menu
  Opção_1 = "Opção 1"
  Opção_2 = "Opção 2"
end
Isto indica que, dentro do módulo "Opções_do_Menu", a variável "Opção_1" é a frase "Opção 1", e que a variável "Opção_2" é a frase "Opção 2".
Note que você utilizou o comando "end". Ele é essencial para a estrutura do script, como já falei antes, para terminar cada
comando básico.

Prática: Comando class

Este comando é bem extenso para ser praticado. Dentro dele será utilizado os comandos "def", "if" e outros.

No mesmo script, abaixo do "end" feito no módulo "Opções_do_Menu", escreva:

Código:

class Scene_Teste < Scene_Base

Isto fará com que a partir dali seja feita a classe "Scene_Teste", que pertencerá a classe "Scene_Base" (através do "< Scene_Base).

Prática: Comando def

Agora, vamos começar a definir como começará a Scene, com um simples comando:
Código:

class Scene_Teste < Scene_Base
  def start
    super
O "super" é um comando que define as dimensões, mas agora não é necessário aprofundar o assunto nele.
Então, vamos colocar como a Scene começa:
Código:

class Scene_Teste < Scene_Base

  def start
    super
    create_command_window
    @status_window = Window_MenuStatus.new(160, 0)
  end
Isto fará com que, quando começar a Scene, o comando "create_command_window" seja executado e, logo depois, criar a "Window_MenuStatus" nas coordenadas 160 horizontal e 0 vertical.
Note que, novamente, utilizamos o "end" para terminar o "def start".

Agora, perceba que o comando "create_command_window" ainda não foi definido, portanto, mãos a obra!
Código:

class Scene_Teste < Scene_Base

  def start
    super
    create_command_window
    @status_window = Window_MenuStatus.new(160, 0)
  end

  def create_command_window

Agora que começamos o processo "create_command_window", vamos continuá-lo.

Código:

class Scene_Teste < Scene_Base

  def start
    super
    create_command_window
    @status_window = Window_MenuStatus.new(160, 0)
  end

  def create_command_window
    s1 = Opções_do_Menu::Opção_1
    s2 = Opções_do_Menu::Opção_2
    @command_window = Window_Command.new(160, [s1, s2])
  end
Isto vai criar a janela "Window_Command", esta parte é mais complicada, irei explicar na aula sobre windows (janelas).
Como pode ver, foi retirado do módulo "Opções_do_Menu", os dados "Opção_1" e "Opção_2" e colocados, respectivamente, nas variáveis "s1" e "s2".

Agora, o que vamos fazer é definir como se atualizará a Scene_Teste, esta forma:
Código:

class Scene_Teste < Scene_Base

  def start
    super
    create_command_window
    @status_window = Window_MenuStatus.new(160, 0)
  end

  def create_command_window
    s1 = Opções_do_Menu::Opção_1
    s2 = Opções_do_Menu::Opção_2
    @command_window = Window_Command.new(160, [s1, s2])
  end

  def update
    @command_window.update
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      update_actor_selection
    end
  end

Apenas colocamos para atualizar a Window_Command e Window_MenuStatus, acho que não preciso explicar muito a parte de como atualizar uma Window, quanto ao resto, apenas copie, esta parte é mais avançada. Agora faremos praticamente o mesmo para definir como terminará a Scene_Teste:
Código:

class Scene_Teste < Scene_Base

  def start
    super
    create_command_window
    @status_window = Window_MenuStatus.new(160, 0)
  end

  def create_command_window
    s1 = Opções_do_Menu::Opção_1
    s2 = Opções_do_Menu::Opção_2
    @command_window = Window_Command.new(160, [s1, s2])
  end

  def update
    @command_window.update
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      update_actor_selection
    end
  end

  def terminate
    @command_window.dispose
    @status_window.dispose
  end

Simplesmente colocamos para fechar a Window_Command e Window_MenuStatus.
Agora, vamos definir os comandos que deixamos para trás, não ligue para a extrutura deles, depois você entenderá melhor.

Código:

class Scene_Teste < Scene_Base

  def start
    super
    create_command_window
    @status_window = Window_MenuStatus.new(160, 0)
  end

  def create_command_window
    s1 = Opções_do_Menu::Opção_1
    s2 = Opções_do_Menu::Opção_2
    @command_window = Window_Command.new(160, [s1, s2])
  end

  def update
    @command_window.update
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      update_actor_selection
    end
  end

  def terminate
    @status_window.dispose
    @command_window.dispose
  end

  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 4
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0      # Item
        $scene = Scene_Item.new
      when 1      # Habilidades
        start_actor_selection
      end
    end
  end
 
  def start_actor_selection
    @command_window.active = false
    @status_window.active = true
    if $game_party.last_actor_index < @status_window.item_max
      @status_window.index = $game_party.last_actor_index
    else
      @status_window.index = 0
    end
  end
 
  def end_actor_selection
    @command_window.active = true
    @status_window.active = false
    @status_window.index = -1
  end
 
  def update_actor_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_actor_selection
    elsif Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_window.index
      Sound.play_decision
      case @command_window.index
      when 1  # Habilidades
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # Equipamento
        $scene = Scene_Equip.new(@status_window.index)
      end
    end
  end
end
Perceba que, em "def update_actor_selection", foram utilizados os comandos "if" e "elsif". Veja a partir deles como eles funcionam caso não tenha entendido antes (o que eu duvido muito). Aproveite também para observar a função do comando "case", que não foi explicado no momento.

Agora crie um evento chamando o script:

Código:

$scene = Scene_Teste.new

Veja se funcionou, caso não tenha funcionado, dê uma boa olhada para verificar se não há erros no que você fez.

Enfim, espero que você tenha aprendido a função de cada um deles, fique atento nas próximas aulas e, caso não tenha entendido alguma coisa, comente com sua dúvida. Até mais!
Voltar ao Topo Ir em baixo

Alucard_2's Classroom 1: Comandos básicos de RGSS2

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo
Página 1 de 1

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
The World of EverGrand :: Programação em Linguagens :: Ruby Game Scripting System :: Programação-