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.
Veja se isso atende:
Spoiler
sleep(5)
Citação de: Resque online 09/09/2016 às 00:09
Veja se isso atende:
Spoiler
sleep(5)
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").
Sim.
Cara, se conseguir aguardar um pouco, eu consigo fazer um script de "wait" para você.
Deixa só eu arrumar um tempo livre.
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.
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
//[...]
}
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
//[...]
}
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.