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

telemidia.puc.rio.br
from telemidia.puc.rio.br More from this publisher
11.07.2015 Views

Os parâmetros são as posições x,y da origem e a largura e altura a partirdesse ponto (Listagem 18.22).function redraw ()canvas:attrColor('black')canvas:drawRect('fill', 0,0, canvas:attrSize())canvas:compose( cavalo.x, cavalo.y, cavalo.canvas,cavalo.quadro*cavalo.larg,0,cavalo.larg,cavalo.alt) )canvas:flush()endListagem 18.22 Função de redesenhoPara animar o cavalo, usaremos uma corrotina, como no exemplo anterior(Listagem 18.23).function animaCavalo ()local partida = 10 -- posição da linha de partidalocal chegada = 500 -- posição da linha de chegadalocal mudaQuadro = 20 -- muda de quadro a cada 20pxcavalo.x = partidawhile cavalo.x < chegada docoroutine.yield()local deslocamento = 3 + math.random(1,3)cavalo.x = cavalo.x + deslocamentomudaQuadro = mudaQuadro – deslocamentoif mudaQuadro < 0 thenquadro = (quadro + 1) % 6mudaQuadro = 20endredraw()endendcoAnimaCavalo = coroutine.create(animaCavalo)Listagem 18.23 Corrotina para animação dos cavalosO deslocamento do cavalo, a cada 30 milissegundos, varia de 3 a 6 pixels,de acordo com a chamada à função math.random, para que a aplicação tenhaalguma imprevisibilidade. O código para a função update e o tratador deeventos são iguais aos do exemplo anterior, bastando trocar o nome dacorrotina de animação.Novamente, o uso de uma corrotina permite que o código do cavalo sejaescrito sequencialmente, facilitando o desenvolvimento e o entendimento domesmo.396

18.5 Reúso de Código LuaConforme mencionado por diversas vezes, um documento NCL não contémcódigo Lua diretamente, mas referencia um objeto contendo o código Lua.Isso cria dois ambientes isolados de programação e também permite que ummesmo código Lua possa ser reusado em diversos objetos de mídia NCL.Para tornar ainda mais versátil essa abordagem, elos de atribuição em NCLpodem ser usados para informar parâmetros a scripts Lua. Âncoras emobjetos de mídia NCLua permitem tanto que o código Lua sirva comocondição para o disparo de elos quanto permitem que o código Lua trateações provenientes de elos, como já vimos.O reúso de código Lua permite, por exemplo, que se definam componentesgráficos (ou widgets), tais como caixas de texto ou painéis de opção, umaúnica vez. Cada componente gráfico poderia ser reusado e parametrizado emdocumentos NCL como um objeto de mídia orquestrado, tal como qualqueroutro objeto de mídia.Exemplo 18.5 — Corrida de Cavalos (Parte II)Este exemplo estende o Exemplo 18.4 para ilustrar uma corrida entrecavalos. O mesmo script NCLua, responsável pela animação de um únicocavalo, é reusado na especificação de quatro objetos de mídia, demonstrandoo uso de NCL como um orquestrador entre objetos de código imperativo deigual conteúdo.A Figura 18.10 apresenta a visão estrutural do exemplo. O objeto de mídia“cavalo1” é a porta de início da exibição do documento. Quando “cavalo1” éiniciado, os outros objetos de mídia “cavalo2”, “cavalo3” e “cavalo4”também são iniciados. Os quatro objetos de mídia referenciam o mesmoarquivo de extensão .lua.pIniciocavalo1onBegincavalo4startcavalo2startstartcavalo3Figura 18.10 Visão Estrutural do Exemplo 18.5.397

Os parâmetros são as posições x,y da orig<strong>em</strong> e a largura e altura a partirdesse ponto (Listag<strong>em</strong> 18.22).function redraw ()canvas:attrColor('black')canvas:drawRect('fill', 0,0, canvas:attrSize())canvas:compose( cavalo.x, cavalo.y, cavalo.canvas,cavalo.quadro*cavalo.larg,0,cavalo.larg,cavalo.alt) )canvas:flush()endListag<strong>em</strong> 18.22 Função de redesenhoPara animar o cavalo, usar<strong>em</strong>os uma corrotina, como no ex<strong>em</strong>plo anterior(Listag<strong>em</strong> 18.23).function animaCavalo ()local partida = 10 -- posição da linha de partidalocal chegada = 500 -- posição da linha de chegadalocal mudaQuadro = 20 -- muda de quadro a cada 20pxcavalo.x = partidawhile cavalo.x < chegada docoroutine.yield()local deslocamento = 3 + math.random(1,3)cavalo.x = cavalo.x + deslocamentomudaQuadro = mudaQuadro – deslocamentoif mudaQuadro < 0 thenquadro = (quadro + 1) % 6mudaQuadro = 20endredraw()endendcoAnimaCavalo = coroutine.create(animaCavalo)Listag<strong>em</strong> 18.23 Corrotina para animação dos cavalosO deslocamento do cavalo, a cada 30 milissegundos, varia de 3 a 6 pixels,de acordo com a chamada à função math.random, para que a aplicação tenhaalguma imprevisibilidade. O código para a função update e o tratador deeventos são iguais aos do ex<strong>em</strong>plo anterior, bastando trocar o nome dacorrotina de animação.Novamente, o uso de uma corrotina permite que o código do cavalo sejaescrito sequencialmente, facilitando o desenvolvimento e o entendimento domesmo.396

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

Saved successfully!

Ooh no, something went wrong!