Erro com áudio (Scene de Openning, antes do Título)

4 Respostas   527 Visualizações

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

erikfn

  • *
  • Posts: 4
  • Ouros: 0
Tópico criado em: 11/01/2015 às 10:56 - Última modificação por Mistyrol em 11/01/2015 às 12:49

Estou construindo uma Scene de abertura para rolar antes do título. Basicamente, a ideia é mostrar algumas imagens, em sequência, cada uma com um áudio específico.
Porém, não consigo configurar o áudio. Sempre dá erro, e eu já tentei de tudo. Segue a última versão, onde desisti de tentar descobrir a solução sozinho. Será que alguém poderia me dar uma ideia de como resolver?

class Scene_Intro < Scene_Base

#-------------------------------------------------------------------------------
# Início do processo, chamando a def super da Classe-mãe
#-------------------------------------------------------------------------------
  def start
    super
    SceneManager.clear
    Graphics.freeze
    create_images
    @show_off = false
    play_music
  end
 
#-------------------------------------------------------------------------------
# Atualização da tela
#-------------------------------------------------------------------------------
# renomeando def update
  alias intro update
# chamando a def update, mantendo as configurações originais e agregando novas
  def update
    intro
    create_intro
    if Input.trigger?(:C)
      terminate
    end
  end

#-------------------------------------------------------------------------------
# Finalização do processo. Apaga as imagens da tela. Chamada direta para
# Scene_Title quando o processo terminar
#-------------------------------------------------------------------------------
  def terminate
    super
    dispose_images
    SceneManager.goto(Scene_Title)
  end

#-------------------------------------------------------------------------------
# Crianção das imagens. Localização das imagens: Cache.nomedapasta("nome do
# arquivo"). Opacity = 0 - imagens invisíveis.
#-------------------------------------------------------------------------------
  def create_images
    @sprite1 = Sprite.new
    @sprite1.bitmap = Cache.title1("Book")
    @sprite2 = Sprite.new
    @sprite2.bitmap = Cache.title1("Castle")
    @sprite3 = Sprite.new
    @sprite3.bitmap = Cache.title1("CrossedSwords")
    @sprite4 = Sprite.new
    @sprite4.bitmap = Cache.title1("Crystal")
    @sprite1.opacity = 0
    @sprite2.opacity = 0
    @sprite3.opacity = 0
    @sprite4.opacity = 0
  end

#-------------------------------------------------------------------------------
# Aumenta a opacidade das imagens, tornando-as visíveis.
#-------------------------------------------------------------------------------
  def create_intro
    for i in 1..4
      case i
      when 1
        @sprite1.opacity = 255
        Audio.bmg.play("Audio/BMG/Airship", 100, 50)
        transition_intro
        dispose_images
      when 2
        @sprite2.opacity = 255
        Audio.bmg.play("Audio/BMG/Battle1", 100, 50)
        transition_intro
        dispose_images
      when 3
        @sprite3.opacity = 255
        Audio.bmg.play("Audio/BMG/Battle2", 100, 50)
        transition_intro
        dispose_images
      when 4
        @sprite4.opacity = 255
        Audio.bmg.play("Audio/BMG/Battle3", 100, 50)
        transition_intro
        dispose_images
      end
    end
  end
 
#-------------------------------------------------------------------------------
# Limpa as imagens
#-------------------------------------------------------------------------------
  def dispose_images
    @sprite1.bitmap.dispose
    @sprite1.dispose
    @sprite2.bitmap.dispose
    @sprite2.dispose
    @sprite3.bitmap.dispose
    @sprite3.dispose
    @sprite4.bitmap.dispose
    @sprite4.dispose
  end

#-------------------------------------------------------------------------------
# Tempo de transição
#-------------------------------------------------------------------------------
  alias transition_intro transition_speed
  def transition_speed
    transition_intro
    return 30
  end
 
#-------------------------------------------------------------------------------
# Música
#------------------------------------------------------------------------------- 
  def play_music
    RPG::BGM.new("Audio/BMG/", + file_name).play
    RPG::BGS.stop
    RPG::ME.stop
  end
 
end

Lembrando que não estou pedindo que corrijam pra mim, deixando o script pronto para uso. Estou tentando aprender a trabalhar com programação/RGSS, e gostaria muito se pudessem me explicar como fazer as coisas.

P.S.: aproveitando a oportunidade, como posso fazer para que cada imagem tenha seu próprio tempo de duração?

Raizen

  • Administrador
  • *
  • Posts: 3224
  • Ouros: 3192
  • Medalhas Vencedor do Protótipo Premiado Participante notável do evento "A Estação das Luzes do Norte" Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!
Resposta 1: 11/01/2015 às 11:45

criou o objeto Audio =)?
Audio.bmg.play, mais comumente usado o modulo xD? Alias o Audio tem, mas nunca vi método bmg sendo usado nele, nem sei se existe =P.

e segundo ponto,
 RPG::BGM.new("Audio/BMG/", + file_name).play

Vamos destrinchar a método def new, do BGM, o def new, que seria o método new, chama o initialize se o método existe, ou o start se o método existe, isso é algo dentro da base da versão do Ruby usado no RPG Maker.
Um chute qualquer, seria algo assim por exemplo

Código: [Selecionar]
class BGM < ????? # no momento para nós a superclasse não importa :P
    def initialize(path, volume = 100, frequency = 50)
    ------------
    end
end

quando você passa ("Audio/BMG/", + file_name), você está fazendo o seguinte

path = "Audio/BMG/"
+ file_name = volume

, a virgula, indica com qual parametro está passando cada constante ou variável, logo o correto seria
("Audio/BMG/" + file_name)


Tente ajeitar essas 2 coisas e veja se consegue arrumar, qualquer coisa só voltar ai =)

erikfn

  • *
  • Posts: 4
  • Ouros: 0
Resposta 2: 11/01/2015 às 12:10

Tentei modificar, do jeito que eu entendi, mas o erro continua exatamente o mesmo:

Script 'Scene_intro' line 119: NameError occurred.
undefined local variable or method 'filename' for #<Scene_Intro:0xb49d51c>

Raizen

  • Administrador
  • *
  • Posts: 3224
  • Ouros: 3192
  • Medalhas Vencedor do Protótipo Premiado Participante notável do evento "A Estação das Luzes do Norte" Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!
Resposta 3: 11/01/2015 às 13:26

Tentei modificar, do jeito que eu entendi, mas o erro continua exatamente o mesmo:

Script 'Scene_intro' line 119: NameError occurred.
undefined local variable or method 'filename' for #<Scene_Intro:0xb49d51c>
Ai diz que não tem o método ou variável filename, e se no tópico for o script completo, realmente não tem xD, inicie essa variável manolo x)

erikfn

  • *
  • Posts: 4
  • Ouros: 0
Resposta 4: 11/01/2015 às 13:36

De que forma?
Simplesmente escrevendo "filename" logo depois de class Scene_Intro?
*sim, eu tenho muitos problemas com as variáveis. Sei para que funcionam e como usá-las, mas não como criá-las, por exemplo. Já li tutoriais, mas ainda parece vago...*