[VXAce] Como usar wait no Scene_Map?

6 Respostas   402 Visualizações

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

Conspiracy

  • *
  • Posts: 91
  • Ouros: 30
  • Eventer, Roteirista, e revendo ticket de loteria..
Tópico criado em: 08/09/2016 às 04:27 - Última modificação por Conspiracy em 10/09/2016 às 16:22

Então, minha dúvida é bem direta, como diz o tópico
Basicamente, quero mostrar uma animação, mas espera-la terminar. (No caso é para um ABS).
Estou modificando o SAS - IV para isso.
Segue um trecho código da minha função:
Código: [Selecionar]
class Game_Player < Game_Character
  def attack
    if $game_switches[5]
      if !$posx_time.empty? && $cooldown_time <= 0
        $game_player.animation_id = 2
        $game_troop.interpreter.wait(5)
        RPG::SE.new("Wind7", 100, 100).play
        $game_player.animation_id = 3

No caso, sem o wait ele roda ambos (as duas animações e o som) ao mesmo tempo.
Como a função existe na Game_Interpreter, tentei chamá-la. Mas ocorre o seguinte erro.
"FiberError: Cannot yield from root fiber".
Não entendo muito disto, mas acredito que é por estar na Scene_Map (E não ter nenhum "parente").
Não faço a menor ideia de como resolver isso. E como o sistema trabalha todo por script, pelo menos por agora, estou correndo da ideia de ir para os eventos comuns.
Writing codes. Writing novels. Writing... Fates.

Resque

Resposta 1: 09/09/2016 às 00:09

Veja se isso atende:

Spoiler
[close]

Conspiracy

  • *
  • Posts: 91
  • Ouros: 30
  • Eventer, Roteirista, e revendo ticket de loteria..
Resposta 2: 09/09/2016 às 14:59

Veja se isso atende:

Spoiler
[close]
Valeu a sugestão, mas, já esperava que não funcionasse. Testei só pra confirmar mesmo. No caso o sleep para o jogo inteiro. (Gera um "freeze").
Writing codes. Writing novels. Writing... Fates.

Resque

Resposta 3: 09/09/2016 às 15:05

Sim.

Cara, se conseguir aguardar um pouco, eu consigo fazer um script de "wait" para você.

Deixa só eu arrumar um tempo livre.

Conspiracy

  • *
  • Posts: 91
  • Ouros: 30
  • Eventer, Roteirista, e revendo ticket de loteria..
Resposta 4: 09/09/2016 às 23:06

Sim.

Cara, se conseguir aguardar um pouco, eu consigo fazer um script de "wait" para você.

Deixa só eu arrumar um tempo livre.
Dei uma fuçada na API do Ruby e não consegui.
Se não for te atrapalhar, fique a vontade. Perguntei por achar que fosse algo simples.
Por enquanto estou tentando um jeito de não usar o 'wait' e não ficar estranho.
Agradeço sua disposição, vou aguardar então.
Writing codes. Writing novels. Writing... Fates.

TonyHart

  • *
  • Posts: 144
  • Ouros: 126
  • Born in 95 to die
Resposta 5: 10/09/2016 às 04:37 - Última modificação por tonyhart em 10/09/2016 às 04:53

Não sei qual o seu conhecimento de programção, e eu não programo em ruby, mas posso te passar uma lógica:

O codigo possui umas variaveis de controle que vc usa pra dizer que a animacao deve comecar e em quantos frames deve comecar... Qualquer dúvida só falar

Código: [Selecionar]
    var mostrarAnimacao = false;
    var waitFramesAnimacao = 0;

    function metodoUpdateDoRpgMaker() { // Metodo update, no Ace nao sei dizer qual é, vc deve saber
        //[...]
        if(mostrarAnimacao === true) { // Se mostrarAnimacao for verdadeiro
            waitFramesAnimacao--; // Diminuir o contador de frames da animacao
            if(waitFramesAnimacao == 0) { // Se o contador chegar a zero
                RPG::SE.new("Wind7", 100, 100).play // executa animacao
                mostrarAnimacao = false; // Finaliza animacao
            }
        }
        //[...]
    }


    function funcaoAttackQueVocePostouNoTopico() {
        //[...]
        $game_player.animation_id = 2
        // $game_troop.interpreter.wait(5)
        // RPG::SE.new("Wind7", 100, 100).play Ao inves de tocar animacao
        mostrarAnimacao = true; // Dizer que vc quer iniciar animacao
        waitFramesAnimacao = 32; // Dizer em quantos frames vc quer que a animacao seja executada
        //[...]
    }
Born in 95 to die

Conspiracy

  • *
  • Posts: 91
  • Ouros: 30
  • Eventer, Roteirista, e revendo ticket de loteria..
Resposta 6: 10/09/2016 às 13:29 - Última modificação por Conspiracy em 10/09/2016 às 16:22

Vou dar uma olhada nessa lógica...
Volto e dou um edit se conseguir.

@EDIT:
Não sei qual o seu conhecimento de programção, e eu não programo em ruby, mas posso te passar uma lógica:

O codigo possui umas variaveis de controle que vc usa pra dizer que a animacao deve comecar e em quantos frames deve comecar... Qualquer dúvida só falar

Spoiler
[close]
Consegui aqui (Também não programo ruby, mas to aprendendo, enfim).
Dei uma modificada na game_map (que seria a GameMap do MV). Agora estou só adaptando os tempos da animações pra corrigir a gambiarra que tinha feito. Mas deu certo, Obrigado!



Sim.

Cara, se conseguir aguardar um pouco, eu consigo fazer um script de "wait" para você.

Deixa só eu arrumar um tempo livre.
Well, Bom, como já foi citado, consegui seguindo a lógica do [user]tonyhart[/user], mas agradeço o esforço.
Writing codes. Writing novels. Writing... Fates.