11.07.2015 Views

Programando em NCL 3.0.pdf - Telemidia - PUC-Rio

Programando em NCL 3.0.pdf - Telemidia - PUC-Rio

Programando em NCL 3.0.pdf - Telemidia - PUC-Rio

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

pode, a partir de outro trecho do código, ter sua execução continuada doponto onde parou, executando até o seu término ou nova suspensão. Note queuma corrotina que não se suspende antes de terminar é exatamente uma rotinacomum.O uso de corrotinas <strong>em</strong> Lua é feito através das seguintes primitivas:coroutine.create (f): retorna uma nova corrotina a partir da funçãopassada como parâmetro. Cria os meios pelos quais o estado de umacorrotina é preservado entre suspensõescoroutine.resume (co): recomeça a execução da corrotina do ponto ondeparou. Também serve para iniciar a corrotinacoroutine.yield (): suspende a execução da corrotina <strong>em</strong> execuçãocoroutine.status (co): retorna o estado da corrotina passada, que pode serrunning, suspended, normal ou deadVoltando ao ex<strong>em</strong>plo da animação do logotipo de Lua, agora pod<strong>em</strong>osusar o loop probl<strong>em</strong>ático da Listag<strong>em</strong> 18.18, bastando colocá-lo dentro deuma corrotina e trocando a chamada sleep() por coroutine.yield() (Listag<strong>em</strong>18.20).function animaLogoLua ()while lua.x < 100 dolua.x = lua.x + 5redraw()coroutine.yield() -- sleep(30)endendcoAnimaLogoLua = coroutine.create(animaLogoLua)function update ()coroutine.resume(coAnimaLogoLua)if coroutine.status(coAnimaLogoLua) ~= 'dead' thenevent.timer(30, update)endendfunction tratador (evt)if evt.action == 'start' thenupdate()endendevent.register(tratador, 'ncl', 'presentation')Listag<strong>em</strong> 18.20 Ex<strong>em</strong>plo de uso de corrotinas para realizar uma animação.394

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!