Centro RPG Maker

Centro de Suporte => Suporte Geral => Suporte para Scripts e Plugins => Tópico iniciado por: Conspiracy online 08/09/2016 às 04:27

Título: [VXAce] Como usar wait no Scene_Map?
Enviado por: Conspiracy online 08/09/2016 às 04:27
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:
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.
Título: [VXAce] Como usar wait no Scene_Map?
Enviado por: Resque online 09/09/2016 às 00:09
Veja se isso atende:

Spoiler

sleep(5)
[close]
Título: [VXAce] Como usar wait no Scene_Map?
Enviado por: Conspiracy online 09/09/2016 às 14:59
Citação de: Resque online 09/09/2016 às 00:09
Veja se isso atende:

Spoiler

sleep(5)
[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").
Título: [VXAce] Como usar wait no Scene_Map?
Enviado por: Resque online 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.
Título: [VXAce] Como usar wait no Scene_Map?
Enviado por: Conspiracy online 09/09/2016 às 23:06
Citação de: Resque online 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.
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.
Título: [VXAce] Como usar wait no Scene_Map?
Enviado por: TonyHart online 10/09/2016 às 04:37
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


    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
        //[...]
    }
Título: [VXAce] Como usar wait no Scene_Map?
Enviado por: Conspiracy online 10/09/2016 às 13:29
Vou dar uma olhada nessa lógica...
Volto e dou um edit se conseguir.

@EDIT:
Citação de: tonyhart online 10/09/2016 às 04:37
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

    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
        //[...]
    }
[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!



Citação de: Resque online 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.
Well, Bom, como já foi citado, consegui seguindo a lógica do [user]tonyhart[/user], mas agradeço o esforço.