[Script] Timer |
Laagaadoo « Citoyen » 1461956700000
| 2 | ||
Início Oi, nesse tópico vim apresentar um script que facilita a criação de timers.Com ele você pode criar vários timers ao mesmo tempo facilmente e com algumas opções. Como usar Crie um timer usando a função addTimer, ela retorna o ID do timer, que você pode usar depois para removê-lo, também é possível atribuir um rótulo ao timer, nesse caso vamos atribuir o rótulo "teste". Cuidado pois dois ou mais timers podem ter o mesmo rótulo. Code Lua 1 2 3 local timer = addTimer(function(i) O timer que fizemos irá invocar uma 1 bigorna a cada 1 segundo (1000 milissegundos) 5 vezes. Você pode ter reparado que a função que passamos tem um argumento i, este é o número de vezes que o timer já correu. Vamos mudar um pouco a função. Suponhamos que você queira que na terceira vez que o timer seja acionado, uma tábua seja invocada no lugar da bigorna, e na última vez uma caixa. Basta usar o primeiro argumento da função: Code Lua 1 2 3 4 5 6 7 8 9 local timer = addTimer(function(i) Se você quiser remover um timer, basta usar a função removeTimer passando o ID ou rótulo do timer. Code Lua 1 2 3 removeTimer(timer) Se você quiser pausar um timer, basta usar a função pauseTimer passando o ID ou rótulo do timer. Code Lua 1 2 3 pauseTimer(timer) Para resumir um timer pausado, use a função resumeTimer passando o ID ou rótulo do timer. Code Lua 1 2 3 resumeTimer(timer) Se você quiser uma organização maior, pode utilizar o evento eventTimerComplete invéz de checar pelos ciclos feitos. Esse evento é chamado quando um timer não infinito termina todos os ciclos. Exemplo: Code Lua 1 2 3 4 5 6 7 8 9 local timer = addTimer(function(i) A mensagem "As 5 bigornas foram invocadas!" será exibida depois do timer completar os 5 ciclos. Você pode remover todos os timers de uma só vez usando a função clearTimers: Code Lua 1 clearTimers() Para fazer os timers funcionarem você deve chamar a função timersLoop() no seu eventLoop: Code Lua 1 2 3 function eventLoop(elapsed, remaining) Use 0 no número de ciclos se você quiser um timer infinito. Lembre-se que o primeiro argumento da função do timer é o número de ciclos já feito, portanto os outros argumentos (do segundo em diante) são os argumentos passados para a função do timer, que você definiu. Atenção: os IDs dos timers são reutilizados, portanto certifique-se de que ao remover, pausar ou resumir um timer você não está afetando na realidade outro timer que você não queria afetar. Funções
Eventos
Este é outro exemplo. Não se esqueça de incluir as funções principais antes de tentar rodar isso. Code Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 local first, second, third Dernière modification le 1562959380000 |
Fofinhoppp « Consul » 1461962160000
| 0 | ||
maravilhoso Dernière modification le 1487016300000 |
Igortieni « Citoyen » 1461968640000
| 0 | ||
Muito bom o timer |
Mescouleur « Citoyen » 1461971640000
| 0 | ||
Que legal, pena que não posso testar Não tenho 1k de queijos. |
Squalleze « Citoyen » 1462021260000
| 0 | ||
Gj, muito bom :v |
Ninguem « Consul » 1462034100000
| 0 | ||
Eu mesmo ia criar uma função para facilitar timers sem usar os oficiais (que é ruim na maioria das vezes, pois só permite 40 ao mesmo tempo), mas que bom que você se propôs a fazer, vai nos ajudar muito. Sugestão pro eventTimerCompleted: poder fornecer uma nome pro timer, já que só o id nem sempre é suficiente para identificar um tipo de timer. Sei que podemos armazenar os ids dos timers que queremos identificar, mas se pudermos colocar uma identificação que pudesse se repetir entre timers de mesmo tipo, facilitaria pra não precisar fazer for pra descobrir se o id do timer está no tal grupo. function eventTimerComplete(id, label) if label == "bola" then print("uma bola foi invocada") end end |
Laagaadoo « Citoyen » 1462036860000
| 0 | ||
Obrigado á todos :) Ninguem a dit : Obrigado pela sugestão! Atualizei o script, agora é possível adicionar rótulos pros timers. Dernière modification le 1462037280000 |
0 | ||
ótima classe |
Laagaadoo « Citoyen » 1463608080000
| 0 | ||
Eshkation a dit : obg |
Hydroper « Citoyen » 1487508480000
| 0 | ||
Parece legal, mas como é uma classe (no título do tópico) seria bom implementar uma classe global ao invés de métodos. E poderia implementar o eventLoop() separadamente como método estático da classe. |
0 | ||
Parabéns |
Laagaadoo « Citoyen » 1539889740000
| 0 | ||
Atualizei o script e o tópico, novidades no script:
Atenção ao remover, pausar e resumir timers, pois como o ID agora é reutilizado, você deve certificar-se de que está afetando o timer que realmente quer afetar e não outro que entrou no lugar daquele ID. |