Fundamentos e Padrões
3.4 Adicionando Sincronismo com Interatividade
elementos <property>, mesmo que seus valores iniciais sejam definidos usando elementos <descriptor> ou <region>. No caso, queremos manipular as variáveis de posicionamento e dimensão (“left”, “top”, “width”, “height”), representadas pelo valor “bounds”, como ilustrado pela Listagem 3.17, onde também é ilustrada a inclusão dos três novos objetos de mídia no conjunto de objetos de mídia anteriormente definido: a imagem de fundo (“background”), o ícone (“icon”) e o vídeo de propaganda (“shoes”).
<media id="background" src="../media/background.png"
descriptor="backgroundDesc"/>
<media id="animation" src="../media/animGar.mp4"
descriptor="screenDesc">
<area id="segDrible" begin="12s"/>
<area id="segPhoto" begin="41s"/>
<area id="segIcon" begin="45s" end="51s"/>
<property name="bounds"/>
</media>
<media id="choro" src="../media/choro.mp4" descriptor="audioDesc"/>
<media id="drible" src="../media/drible.mp4"
descriptor="dribleDesc"/>
<media id="photo" src="../media/photo.png" descriptor="photoDesc"/>
<media id="icon" src="../media/icon.png" descriptor="iconDesc"/>
<media id="shoes" src="../media/shoes.mp4" descriptor="shoesDesc"/>
Listagem 3.17 Conjunto de elementos <media> da nova versão da aplicação.
Temos agora de acrescentar os descritores e as regiões para a apresentação dos novos objetos de mídia, como ilustra a Listagem 3.18. Note que as novas regiões para exibição do ícone e do vídeo de propaganda foram definidas como filhas do elemento <region> “screenReg”, ou seja, relativas a essa região previamente definida.
<regionBase>
...
<region id="screenReg" width="100%" height="100%" zIndex="2">
...
<region id="iconReg" left="87.5%" top="11.7%" width="8.45%"
height="6.7%" zIndex="3"/>
<region id="shoesReg" left="15%" top="60%" width="25%"
height="25%" zIndex="3"/>
</region>
</regionBase>
<descriptorBase>
...
<descriptor id="iconDesc" region="iconReg" explicitDur="6s"/>
<descriptor id="shoesDesc" region="shoesReg"/>
</descriptorBase>
Listagem 3.18 Definição dos novos elementos <region> e dos novos elementos
<descriptor>.
Resta agora definir os três novos relacionamentos introduzidos, e incorporar aos relacionamentos “lMusic” e “lEnd” as ações para iniciar e terminar a apresentação da imagem de fundo, como ilustra a Listagem 3.19.
<link id="lMusic" xconnector="conEx#onBeginStart_delay">
<bind role="onBegin" component="animation"/>
<bind role="start" component="background">
<bindParam name="delay" value="5s"/>
</bind>
<bind role="start" component="choro">
<bindParam name="delay" value="5s"/>
</bind>
</link>
<link id="lEnd" xconnector="conEx#onEndStop">
<bind role="onEnd" component="animation"/>
<bind role="stop" component="background"/>
<bind role="stop" component="choro"/>
</link>
<link id="lIcon" xconnector="conEx#onBeginStart">
<bind role="onBegin" component="animation"
interface="segIcon"/>
<bind role="start" component="icon"/>
</link>
<link id="lAdvert" xconnector="conEx#onKeySelectionStopSet_varStart">
<bind role="onSelection" component="icon">
<bindParam name="keyCode" value="RED"/>
</bind>
<bind role="set" component="animation" interface="bounds">
<bindParam name="var" value="5%,6.67%,45%,45%"/>
</bind>
<bind role="start" component="shoes"/>
<bind role="stop" component="icon"/>
</link>
<bind role="onEnd" component="shoes"/>
<bind role="set" component="animation" interface="bounds">
<bindParam name="varSet" value="0,0,100%,100%"/>
</bind>
</link>
Listagem 3.19 Definição dos novos relacionamentos.
Os dois primeiros elementos <link> (“lMusic” e “lEnd”) determinam o início e o fim da exibição da imagem de fundo como coincidindo com o início e fim da exibição do áudio chorinho, respectivamente.
O terceiro elemento <link> (“lIcon”) define que, ao começar (condição
“onBegin”) a apresentação do trecho da animação quando o ícone deve aparecer, ele tenha sua apresentação iniciada (ação “start”).
O quarto elemento <link> (“lAdvert”) é mais complexo. Ele define que, se o ícone da chuteira for selecionado (condição “onSelection”) pela tecla vermelha do controle remoto (passada como parâmetro do papel correspondente, keycode=“RED”), o vídeo da animação deve ser redimensionado (ação “set” na propriedade “bounds” definida no elemento
“animation”) para os valores passados como parâmetros (left=“5%”, top=“6,67%”, width e height =“45%”, todos relativos à dimensão da tela). O relacionamento também determina que a propaganda da chuteira deve ser iniciada (ação “start” no elemento “shoes”) e que o ícone deve parar sua exibição (ação “stop” no elemento “icon”).
O quinto elemento <link> (“lEndAdvert”) especifica que, quando o vídeo correspondente à propaganda da chuteira terminar (condição “onEnd”), o vídeo da animação deve retomar suas dimensões originais (ação “set” na propriedade “bounds” definida no elemento “animation”).
A Listagem 3.20 apresenta o programa NCL correspondente à nova versão da aplicação.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Exemplo de sincronismo sem interacao do usuario e com interacao do usuario -->
<ncl id="syncInt" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
<head>
<regionBase>
<region id="backgroundReg" width="100%" height="100%"
zIndex="1"/>
<region id="screenReg" width="100%" height="100%"
zIndex="2">
<region id="frameReg" left="5%" top="6.7%" width="18.5%"
height="18.5%" zIndex="3"/>
<region id="iconReg" left="87.5%" top="11.7%"
width="8.45%" height="6.7%" zIndex="3"/>
<region id="shoesReg" left="15%" top="60%" width="25%"
height="25%" zIndex="3"/>
</region>
</regionBase>
<descriptorBase>
<descriptor id="backgroundDesc" region="backgroundReg"/>
<descriptor id="screenDesc" region="screenReg"/>
<descriptor id="photoDesc" region="frameReg"
explicitDur="5s"/>
<descriptor id="audioDesc"/>
<descriptor id="dribleDesc" region="frameReg"/>
<descriptor id="iconDesc" region="iconReg"
explicitDur="6s"/>
<descriptor id="shoesDesc" region="shoesReg"/>
</descriptorBase>
<connectorBase>
<importBase documentURI="../causalConnBase.ncl"
alias="conEx"/>
</connectorBase>
</head>
<body>
<port id="entry" component="animation"/>
<media id="background" src="../media/background.png"
descriptor="backgroundDesc"/>
<media id="animation" src="../media/animGar.mp4"
descriptor="screenDesc">
<area id="segDrible" begin="12s"/>
<area id="segPhoto" begin="41s"/>
<area id="segIcon" begin="45s" end="51s"/>
<property name="bounds"/>
</media>
<media id="choro" src="../media/choro.mp4"
descriptor="audioDesc"/>
<media id="drible" src="../media/drible.mp4"
descriptor="dribleDesc"/>
<media id="photo" src="../media/photo.png"
descriptor="photoDesc"/>
<media id="icon" src="../media/icon.png"
descriptor="iconDesc"/>
<media id="shoes" src="../media/shoes.mp4"
<link id="lMusic" xconnector="conEx#onBeginStart_delay">
<bind role="onBegin" component="animation"/>
<bind role="start" component="background">
<bindParam name="delay" value="5s"/>
</bind>
<bind role="start" component="choro">
<bindParam name="delay" value="5s"/>
</bind>
</link>
<link id="lDrible" xconnector="conEx#onBeginStart">
<bind role="onBegin" component="animation"
interface="segDrible"/>
<bind role="start" component="drible"/>
</link>
<link id="lPhoto" xconnector="conEx#onBeginStart">
<bind role="onBegin" component="animation"
interface="segPhoto"/>
<bind role="start" component="photo"/>
</link>
<link id="lEnd" xconnector="conEx#onEndStop">
<bind role="onEnd" component="animation"/>
<bind role="stop" component="background"/>
<bind role="stop" component="choro"/>
</link>
<link id="lIcon" xconnector="conEx#onBeginStart">
<bind role="onBegin" component="animation"
interface="segIcon"/>
<bind role="start" component="icon"/>
</link>
<link id="lAdvert"
xconnector="conEx#onKeySelectionStopSet_varStart">
<bind role="onSelection" component="icon">
<bindParam name="keyCode" value="RED"/>
</bind>
<bind role="set" component="animation" interface="bounds">
<bindParam name="var" value="5%,6.67%,45%,45%"/>
</bind>
<bind role="start" component="shoes"/>
<bind role="stop" component="icon"/>
</link>
<link id="lEndAdvert" xconnector="conEx#onEndSet">
<bind role="onEnd" component="shoes"/>
<bind role="set" component="animation" interface="bounds">
<bindParam name="varSet" value="0,0,100%,100%"/>
</bind>
</link>
</body>
</ncl>
Listagem 3.20 O Primeiro João com sincronismo por interação.
A Figura 3.6 ilustra mais dois momentos da exibição, o início do aparecimento do ícone e o momento da apresentação da propaganda, obtidos durante a execução da aplicação na implementação de referência do middleware Ginga-NCL.
Figura 3.6 Cenas da aplicação O Primeiro João com interatividade.