Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Aprenda como criar um setInterval / setTimout

Tutoriais, videoaulas, guias e downloads para te ajudar nos estudos.
Avatar do usuário
KanekiZLF
Membro
Membro
Reações: 4
Mensagens: 34
Localização: Para

Aprenda como criar um setInterval / setTimout

Mensagem por KanekiZLF » Sex Mar 24, 2023 6:55 pm

Boa Tarde pessoal. Eu queria executa uma função a cada 1 segundo e repetir isso infinitamente e depois de muita pesquisa, encontrei esse excelente script feito por Lucas Chasteen, e vim compartilhar com vocês aqui !

Eu sei que poderia usar o alarme, mas dessa maneira ficou bem mais dinâmico e sem limites !

Pra quem ja programou em JavaScript, esse script tem a mesma função do setInterval ou do setTimout,

Para quem nunca programou em JS, recomendo a olhar os links das funções para entender melhor como funcionam !

Para usar a função é muito simples, depois de criar script e colocar o código dentro dele, lembrando, cole todo o script abaixo do seu function inicial, ou substitua ele, ai use

if (wait("meu_timer", 300)) { /* Função ou script que quer executa em um loop de 5 minutos */ }

na parte de "Meu Timer", você pode colocar o nome que quiser, só lembre que ele é global, então nunca use o mesmo nome se não vai da conflito, após isso você define o tempo em segundos.

No link citado abaixo o desenvolvedor passa alguns outros scripts que funcionam em conjunto a esse, sendo eles wait_reset (Reseta o seu timer), wait_get_time (Retorna um valor especificando quanto tempo falta para o seu timer chegar a zero 0)

Este é o site onde encontrei

Código: Selecionar todos

function wait(){
/// @function   wait(index, time);
/// @param      {int|string}    index
/// @param      {real}          time
/// @author     Lucas Chasteen <lucas.chasteen@xgasoft.com>
/// @copyright  XGASOFT 2018, All Rights Reserved
 
/*
Sets a timer and waits for it to complete. Returns 'true' or 'false' depending on timer state.
Input time is a value in seconds.
 
Note that 'true' will only be returned for **one step**, after which the timer will restart
automatically.
 
Timer 'index' can be either an integer or a string. All timers are global, so you should not
use the same index twice unless you want to overwrite a previous timer. For this reason, a
unique string is recommended for easy memorability.
 
Example usage:
    if (wait("t_alarm", 300)) {
        //Action
    }
*/
 
//Set script to auto-init at launch
gml_pragma("global", "wait();");
 
//Initialize data structure if no arguments are supplied
if (argument_count == 0) {
    global.ds_wait = -1; /* DO NOT DO THIS MANUALLY OR YOU WILL CREATE A MEMORY LEAK */
    exit;
}
 
//Ensure timer data structure exists
if (!ds_exists(global.ds_wait, ds_type_map)) {
    global.ds_wait = ds_map_create();
}
 
//Ensure timer ID exists
if (!ds_map_exists(global.ds_wait, argument[0])) {
    global.ds_wait[? argument[0]] = 0;
}
 
//Set timer
if (global.ds_wait[? argument[0]] == 0) {
    global.ds_wait[? argument[0]] = argument[1];
} else {
    //Decrement timer
    global.ds_wait[? argument[0]] -= delta_time/1000000;
                
    //Reset timer and return true when complete
    if (global.ds_wait[? argument[0]] <= 0) {
        ds_map_delete(global.ds_wait, argument[0]);
        return true;
    }
}
 
//Disable until time is complete
return false;
}
2 Imagem
Ninguém vai bater tão forte como a vida, mas a questão não é o quão forte você consegue bater. É o quão forte você consegue apanhar e continuar seguindo em frente.

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes