Imprimir artigo Tisknout článek
Hlavní stránka > Tipy NCL a Měsíc , Software , Free Software , digitální TV > vytváření aplikací Známky # # NCLua na DTV

Vytváření Známky Aplikace # # NCLua na DTV

V sekci Tipy NCL / Měsíc dnes, ukážu vám, jak vytvořit příznaky, jako jsou vytvořeny pomocí stan značky v HTML.

Předpoklady

Pro připojení k tomuto článku, budete potřebovat základní znalost NCL, Moon a NCLua (jako událost moduly a plátno). Můžete použít Eclipse se plugin NCLEclipse . Doporučujeme použít nejnovější verzi Ginga Virtuální Set Top Box .

Tutoriál o tom, jak struktuře vývojové prostředí je k dispozici zde .

Spuštění

Nejprve vytvořte adresář pro aplikaci. Pak vytvořte soubory main.ncl, main.lua a marquee.lua rotinas.lua. Nebudu vysvětlovat kód NCL, protože to přináší nic mimo základy. Takže můžete vidět všechny níže uvedený kód. Kód je komentoval pro lepší pochopení. Je pouze nutné změnit src médií video1 pro jméno video soubor, který bude umístěn v adresáři aplikace.

 <? Xml version = "1.0" encoding = "iso-8859-1"?>
 <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
     <head>
         <regionBase>
             <region id="rgLua" width="100%" height="24%" left="0" top="76%" zIndex="1" />
             <region id="rgVideo" width="100%" height="100%" zIndex="0" />
         </ RegionBase>

         <descriptorBase>
             <descriptor id="dLua" region="rgLua" focusIndex="luaIdx" />
             <descriptor id="dVideo" region="rgVideo" />
         </ DescriptorBase>

         <! - Když media končí, další začíná ->
         <connectorBase>
             <causalConnector id="onEndStart">
               <simpleCondition role="onEnd" />
               <simpleAction role="start" />
             </ CausalConnector>
         </ ConnectorBase>
     </ Head>

     <body>
         <port id="pVideo" component="video1"/>
         <port id="pLua" component="lua"/>

         <! - Nastaví ovládání zaostření na uzel Moon ->
         <media id="settings" type="application/x-ginga-settings">
             <property name="service.currentKeyMaster" value="luaIdx"/>
         </ Media>

         <! - Video pod Creative Commons licencí
         získaných v http://creativecommons.org/video ->
         <media id="video1" src="media/video.avi" descriptor="dVideo" />

         <media id="lua" src="main.lua" descriptor="dLua" />

         <! - Video1 Po dokončení restartování stejný ->
         <link XConnector = "onEndStart">
	     <bind component="video1" role="onEnd" />
	     <bind component="video1" role="start" />
         </ Link>
     </ Body>
 </ NCL>

Vytvoření třídy Marquee

Pojďme provádění kodexu následující Lua objektově-orientovaný přístup. Existují různé způsoby práce s OO způsobem, který bude používat Měsíc je mezi nejjednodušší a nejsnadnější k pochopení, a nedovolit dědictví nebo další pokročilejší funkce. Pouze zdroj se používá pro atributy, metody a konstruktory.

Pak otevřete soubor marquee.lua. Začněme tím, že přidá modul rutin (jejichž soubor je stále prázdná) se níže uvedený kód:

 vyžadují, "rutinní"

Třídy v Lua nejsou nic víc než tabulek. Takže musíme definovat tabulku pro kontrolu naší třídy, které obsahují atributy stejného, jako je vidět níže. Všechny atributy jsou diskutovány.

 --- Třídy vykazují příznaky v aplikacích, DTV - jako stan HTML - @ author Manuel Campos da Silva Filho - http://manoelcampos.com - @ licence http://creativecommons.org/licenses / by-nc-sa/2.5/br / Marquee = (- Text na displeji text = "", - Vertikální poloha stan top = 0, - Horizontální Marquee left = 0, - šířka označení V mnoha znaků charWidth = 50, - Typ písma mají být použity fontface = 'Věra' - Velikost písma = 36 písmo - Barva písma FontColor = "blue" - je-li pravda, naznačuje, že Přihlaste se budou přesunuty - zprava doleva. - Pokud se rovná false, bude se pohyboval. moveToLeft = true, - Nastaví rychlost animace sign. - Ty by měly informovat interval - v milisekund, se kterým podepsal, musí být aktualizovány. interval = 200 - Čas v sekundách, že stan bude na displeji. - Je-li jim přiděleno číslo, menší nebo roven nule - znak je viditelný po celou dobu. sekund = -1, - Pokud je nastaveno na true, automaticky překreslí obrazovka - zobrazení znamení, - drawText při volání metody. - s falešnými, metoda plátno: flush () by měla být - jen když developer chce obrazovka překreslí, - zobrazení podepsat. autoFlush = true - Ukazuje, zda animace označení je aktivní.  @ Viz zrušit aktivní = true, - hromadí uplynulý čas (v milisekundách) - mezi každém hovoru animovat metody. TimeElapsed = 0) 

Pojďme si definovat funkce pro vymazání plochy obsazené znamení, pomocí níže uvedený kód. Funkce je poměrně jednoduché, kreslení obdélníku na pokrytí plochy značky.

 --- Vymazání plochy značky
 Marquee funkce: jasné ()
   - Nastaví písmo z plátna.  Ačkoli ne byly získány žádné text na obrazovce,
   - Jak používat funkci plátno: measureText objevovat oblasti označení,
   - Pokud se žádný zdroj byl definován dříve,
   - Chyba se generuje volání funkce uvedené.
   plátno: attrFont (self.fontFace, self.fontSize)

   - Vytvořit transparentní pozadí
   plátno: attrColor (255, 255, 255, 0)

   - Získat šířku a výšku textu předána jako parametr.
   místní TW, th = plátno: measureText ("A"),

   - Nakreslete obdélník pokrýt oblasti označení,
   - Zúčtování obsah
   plátno: drawRect ("zaplnit", self.left, self.top, self.charWidth * TW, th)
 konec

Podívejme se nyní definovat funkci pro zastavení animace označení, pomocí níže uvedený kód. Fungovat pouze změny umožňují atribut na hodnotu false (pro indikaci, že budeme vytvářet pro animovat metody by mělo být označení nesmí být větší radost) a čisté plochy značky, volat jasné metody.

 --- Stop animace označení
 Marquee funkce: zrušit ()
   self.active = false
   self: jasné ()
 konec

Nyní definovat metodu drawText, který bude čerpat text na obrazovce. Tato metoda je jednoduchá, stačí pomocí plátno třídy. Text se zobrazí automaticky v případě, že autoFlush atribut roven true (toto je implicitní hodnota). Viz drawText metoda kód:

 --- Display text na obrazovce.  To samé je pouze vyvozeny,
 - Pokud je atribut je pravda autoFlush
 - @ Param txt řetězec, který bude zobrazen
 Marquee funkce: drawText (txt)
   self: jasné ()
   plátno: attrFont (self.fontFace, self.fontSize)
   Plátno: attrColor (self.fontColor)
   plátno: drawText (self.left, self.top, txt)
   pak-li self.autoFlush
      Plátno: flush ()
   konec
 konec

Pojďme definovat třídy konstruktor. Ale dříve, než to, že potřebujeme vytvořit funkci v rámci modulu rotinas.lua, který bude odpovědný za vytvoření kopie tabulky Marquee, které představují instance třídy. To znamená, že instance není nic víc než jiné tabulky, která obsahuje vše, co tabulka Marquee. Next, Otevřít soubor rotinas.lua a vložte následující řádky:

 místní tisk, tisk = párů, páry
 Modul "rutiny"

V prvním řádku obchody globální funkce, které budou použity v rámci modulu, jako místní funkce. To je nutné proto definovat soubor Lua jako modul, to už nemá přístup ke globální proměnné a funkce. Druhý řádek obsahuje soubor rotinas.lua jako modul jméno vzory.

Nyní přidat funkci kód klonovat tabulky:

 --- Clone tabulky
 - @ Param Tabulka tb být klonován
 - @ Return Vrátí nové tabulce
 cloneTable funkce (tb)
   místní klon = () - Vytvoří prázdný stůl
   - Cycles přes prvky v tabulce TB, znovuvytvoření stejný klon v tabulce,
   - To je vrácena funkcí
   pro k, v ve dvojicích (TB)
     klon [k] = v
   konec
   návrat klon
 konec

Návrat nyní do souboru marquee.lua a definujeme třídu konstruktoru Marquee, pomocí níže uvedený kód.

 --- Konstruktor třídy
 - @ Param text Text, který bude zobrazen
 - @ Param top svislé poloze označení
 - @ Param vlevo Horizontální Marquee
 - @ Param charWidth šířka znamení množství znaků
 - @ Return Vrací instanci Marquee
 Marquee funkce: nový (text, nahoře, vlevo, charWidth)
   - Vytvoří instance (kopie) ze třídy (tabulka) Marquee
   místní obj = util.cloneTable (self)

   obj.text = text nebo Marquee.text
   obj.top = top nebo Marque.top
   obj.left = doleva nebo Marque.left
   obj.charWidth = charWidth nebo Marque.charWidth

   - Vrátí panel nastavit
   návrat obj
 konec

Jak bylo vidět, kód je poměrně jednoduchý. Parametry text, nahoře, vlevo, charWidth jsou zařazeny do příslušné oblasti instance. Pokud žádný z těchto atributů je vynecháno, používá výchozí hodnota definovaná ve třídě Marquee.

Nyní nám definovat hlavní funkci, kterou plnil všechny "kouzlo", aby text být přesunuta. Viz níže uvedený kód:

 --- Provede animace označení
 Marquee funkce: animovat ()
   - Místní funkce animovat text.  Všechny kód je v tomto
   - Funkce, která se provádí opakovaně, podle Intervalores
   - Určitý časový interval atributu.
   - Pro takový harmonogram realizace je funkce časovače modul
   - Akce, které by měl dostat funkci bez parametrů pro spuštění
   - Po dobu stanovenou v prvním parametru.
   - Jak oživit funkce je ve třídě Marquee
   - A operátor se používá:,
   - Tam je implicitní parametr self, který představuje
   - Object (tabulka), které nazývá metoda animovat.
   - Takže, není možné předat funkci animovat třída Marquee
   - Pro event.timer, protože to vyžaduje funkce, která nemá parametry.
   animateLocal místní function ()
     pak-li self.active
          Místní parcialText = ""
          - Jen přesunout text, pokud má více než 3 znaky
          if (# self.text> 3) pak
            - Zobrazí se pouze celkový charakter odkazy
            - Šířka (ve znacích), označení
            parcialText string.sub = (self.text, 1, self.charWidth)
            pak-li self.moveToLeft
              - Změny text simulovat účinek pohybu,
              - Řezání první znak
              - Přidáním na konec, takže text pohyb doleva.
              self.text =
                  string.sub (self.text, 2) ..
                  string.sub (self.text, 1, 1)
            jiný
              - Změny text simulovat účinek pohybu,
              - Řezání poslední znak
              - A přidání na začátku, takže text pohybovat vpravo.
              self.text =
                  string.sub (self.text, # self.text) ..
                  string.sub (self.text, 1, # self.text-1)
            konec
          jiný
            parcialText = self.text
          konec
          self: drawText (parcialText)

          - Rozvrh pro výkon funkce animateLocal po
          - Interval (v milisekundách), jsou definovány v self.interval
          event.timer (self.interval, animateLocal)
     konec

     - Pokud sekund je větší než nula, označení má
     - Nastavení času, aby zůstali na displeji
     if (self.seconds> 0) Then
       - Hrabat uplynulý čas.  Pokud je větší, než čas
       - Display, zastaví stan.
       self.timeElapsed = self.timeElapsed + self.interval
       if (self.timeElapsed/1000> = self.seconds), pak
           self: zrušit ()
       konec
     konec
   konec

   animateLocal ()
 konec

Tato funkce je složitější, právě pomocí funkce event.timer. Vzhledem k tomu, text může být přesunut zprava doleva (je-li atribut moveToLeft je pravda, implicitní hodnota), nebo naopak, potřebujeme, aby se metoda animovat třídy Marquee běží na časový interval. To je důvod, proč bychom použít funkci event.timer, jejíž první parametr nastavuje časový interval, který se očekává spuštění funkce hlášených v druhém parametru.

Vzhledem k tomu, funkce přešel na event.timer nemůže mít žádné parametry, můžeme to udělat metodu Marquee animovat třídy, protože to, jak byla definována pomocí dvojtečky (Marquee funkce: animovat ()), má implicitní parametr nazvaný self, který představuje instance (tabulka), který volal metodu, která umožňuje přístup k jeho atributy a metody.

Takže obejít tento "problém" vytvořil místní názvem funkce animateLocal, která obsahuje všechny kód je odpovědný za zpracování textu. Vzhledem k tomu, funkce je funkce animateLocal vnitřní stan: animovat, ona má přístup ke všem parametrům přešel na metodu třídy animovat Marquee. Tento koncept je známý jako Měsíc clousure . Tak, v animovat metodu, tzv. místní funkce animateLocal (která nemá žádné parametry) a tento je předán metodě události časovače třídy.

Jak je vidět v posledním řádku funkce animateLocal, musí jí být volán rekurzivně, po uplynutí doby nastavené v atributu intervalu, a to prostřednictvím výzvy event.timer.

Trik k tomu, že označení být přesunuta je jen manipulace s řetězci. Chcete-li text doleva, řezané na hlavní postavu a přidá na konec řetězce. Chcete-li přesunout doprava, jen snížit poslední znak a přidat na začátek řetězce.

Marquee Naše třída je připravena. Teď už jen stačí vytvořit kód souboru main.lua.

Vytvoření Lua soubor aplikace

Nyní potřebujeme obsahovat pouze kód souboru main.lua. Takže tento soubor otevřít. Začněme marquee.lua včetně souboru, pomocí níže uvedený kód:

 dofile (marquee.lua)

Jelikož tento soubor není modul (to je společný soubor, který obsahuje pouze měsíc v definici třídy Marquee), musíme použít místo dofile vyžadují.

Pojďme si přidat dvě označení v žalobě, pak jít do první. Uvidíte níže uvedený kód, který je velmi jednoduchý.


 místní text = "Marquee Digitální Žádosti o NCLua SBTVD." - Vytvoří stan (text, nahoře, vlevo, charWidth) = místní let1 Marquee: nový (text, 0, 10, 50) let1: animovat () 

Všimněte si, že proměnná byla definována s textem k zobrazení, a volání konstruktoru třídy (Marquee: nový) k vytvoření instance let1. Poté, metoda se nazývá animovat a připraven. Přihlaste se bude pohybovat na dobu neurčitou, pravý-k-vlevo (výchozí chování).

Použití mezery před a za text byl úmyslný. Spustit aplikaci, pak odstraňte tyto mezery, aby oznámení rozdíl. Bez mezer, kdo čtení přesně neví, kdy se text končí, protože když jeden okraj zmizí, jiné se objevuje již na druhé straně. S prostorem, text na druhé straně trvá déle, než se objeví.

Nyní na druhou výzvu, pomocí níže uvedený kód:

 text = "Manuel Campos - http://manoelcampos.com"
 Místní let2 = Marquee: nový (text, 50, 10, 50)
 let2.moveToLeft = false
 - Po 20 sekundách se znamením pro
 let2.seconds = 20
 let2: animovat ()

Všimněte si, že teď, po tom, co nazýváme konstruktor, změnil některé vlastnosti latreiro. S moveToLeft rovná false, znamení se přestěhoval zleva doprava. S více než 20 sekund, označení zmizí po 20 sekundách.

Závěr

Objektově-orientovaný přístup usnadňuje organizaci a opětovné použití kódu, což umožňuje vytváření více instancí třídy a je kód velmi čitelný. Nakonec, hlavní kód aplikace je poměrně malý.

Líbil článek? Přispět: komentář, hodnotit jej, retweet.

Všechny HTML dokumenty vytvořené s LuaDoc , je k dispozici v adresáři doc.

Licence

Stáhnout

Název: Marquee NCLua TVD
Titulek: Žádost o TVD pro zobrazování značky
Soubor: znamení-NCLua-tvd.zip
Velikost: 2 MB
VN: F [1.9.3_1094]
Hodnocení: 6,0 / 10 (3 hlasů)
based on 3 ratings Vytváření Známky Aplikace # # NCLua pro DTV, 6,0 z 10 na základě 3 hodnocení

Související příspěvky:

  1. Vytvoření Instalační for Applications. NET Compact Framework bezplatné nástroje
  2. Pozastavení a sumarizovat video aplikace # # NCL na DTV
  3. NCLua SOAP: Přístup WebServices aplikací pro digitální TV
  4. Vydáno NCLuaSOAP # 0.5.6.4: Podpora params Array a struct
  5. RSS Reader v NCLua digitální TV

Související příspěvky ti přináší ještě další Související změny Plugin .

  1. Valmiro
    02.8.2010 v 19:04 | # 1

    Ahoj Manuel, snažím se spustit tuto aplikaci z Eclipse s ssh spojení s VM. Video nehraje, a já začínám tuto chybu: Chyba v nechráněné volání Lua API (rotinas.lua: 10: pokus index globální 'Marquee' (nulové hodnoty)). Věděli jste, co může být špatně?

  2. Falecomedimar
    10.08.2010 v 14:28 | # 2

    Manuel, Jsem nový NCL a LUA v mém studiu a našel jsem vaše stránky a mám zájem o příspěvky, ale tenhle zejména nalezen pochyb.
    Mám krabici Proview dodávány s houpačkami. Když spustím aplikaci v 720x480 rozlišení přijímá parametry velocidadde zatímco já reolução zvýšení rychlosti klesá. V textu 1920X1080 HD jede pomalu tady, bez přijetí jakéhokoli parametru rychlosti. Víš, že mi vysvětlit, proč se to stane a vy budete muset upravit, aby si to rychleji?

    Obridago

  3. 17.srpna 2010 v 18:32 | # 3

    Bohužel nemůžu říct, co se stane. Pravděpodobně, s rostoucí rozlišení, musí oznámení spotřebují mnohem zpracování v reálném čase. Vzhledem k tomu, STB, má nevelkou, hardware, mělo by to dělat animace je pomalý.

  4. 17 srpen 2010 18:36 | # 4

    Valmiro řeč. Omlouváme se za zpoždění. Nedávno jsem změnil blogu komentoval systému a nebyl přijímání oznámení o nové komentáře. Ale vy jste převedl všechny soubory na VM? Kontakty v http://manoelcampos.com/contato

  5. Ramon Oliveira
    31.srpna 2010 v 04:50 | # 5

    Profesor Manuel Campos, blahopřeji mu a staveniště, začínám v této oblasti a
    těší spousta obsahu .. Mnoho let života a zdraví. Jsem fanoušek lidí jako jste vy, šíření znalostí!

    Ramon Adams
    Analýza a vývoj systémů - IFBA

  1. Ne Zpětné dosud.
Komentáře jsou uzavřeny.
blog připomínky powered by Disqus