Lingo je skriptovací jazyk, který doprovází software Macromedia Director .
Autorem Linga je vývojář John Henry Thompson. Lingo bylo obohaceno mnoha společnostmi, které vyvinuly xtras , včetně Intel , Ageia, Havok ...
Slovo Lingo znamená v anglickém slangu v lidovém smyslu specializovaný jazyk patřící do určité skupiny (např. Slang typografů).
Na rozdíl od nejrozšířenějších jazyků úrovně 4 (základní, javascript ...) skript lingo nereprodukuje koncepty programování stejně, ale reorganizuje je svým vlastním způsobem pro efektivní a jednoduchou aplikaci. Za účelem označení rozdílu používá různé výrazy, například „pole“ je přejmenováno na „seznam“, třída se nazývá „nadřazený skript“ ...
Lingo aktuálně používá ZÁKLADNÍ syntaxi .
Lingo původně měl podrobného syntax odvozená z HyperTalk jazyka používaného v HyperCard autorizačního software distribuovaný na Macintosh od roku 1986. To bylo původně zamýšlel být čitelné a co nejpřehlednější pro reproduktory angličtiny.
Zde je příklad funkce:
on multiplie(a, b) return a*b end multiplieVšechny funkce začínají na [název funkce] [(argumenty)] a končí koncem [název funkce] . Lingo je velmi laxní jazyk, například nám není dovoleno dávat za název funkce závorky (vynásobíme a, b).
Všimněte si, že proměnné jsou zadávány dynamicky a mezi přiřazením "=" a porovnáním "=" není rozdíl.
if a=1 then b=2 else if a="une chaîne" then b=3 end if end ifPo letech syntaktické evoluce se Lingo stal docela klasickým „point-in“ jazykem, a proto je velmi čitelný.
Director je software zaměřený na interaktivitu. Lingo proto umožňuje snadné zachycení velkého počtu událostí, jako jsou: preparemovie (před zobrazením), startmovie (v době zobrazení), mousedown (kliknutí dolů), mouseup (uvolnění kliknutí) atd. Některé skripty pro zachycování událostí se týkají celého programu, jiné se mohou vztahovat pouze na konkrétní objekty, například na skřítky (výskyt objektu - například grafiky - na ploše ).
on mouseup -- lorsque l'on clique sur l'objet auquel s'applique ce script'' if the mouseh<320 then -- si la position horizontale de la souris est inférieure à 320 puppetsound(1, "bing") -- on déclenche le son nommé "bing" sur la piste 1. end if endČíselné proměnné v lingingu jsou zjednodušeny. Globální nebo objektové proměnné jsou deklarovány pouze mimo funkce. Místní proměnné jsou deklarovány implicitně.
Psaní je implicitní, takže:
Neexistují žádné booleovské proměnné, lingo používá celá čísla 0 a 1, která však z důvodů čitelnosti mohou být zapsána jako pravdivá a nepravdivá.
Řetězce lze číst jako pole pomocí globální proměnné "the itemDelimiter" a priority .item řetězců nebo vlastností .line a .word řetězců.
názvy proměnných mohou obsahovat písmena, číslice nebo podtržítko. Nemohou začít číslem.
Můžete vytvářet symboly se znakem libry ( # ). Symbol není proměnná, ale název proměnné nebo funkce.
Například v myColor = #red slovo #red pro Linga nic neznamená; na druhou stranu, myColor = barvy [#rouge] vám umožní najít vlastnost red objektu barev, funkce call (#rouge, obj, argumenty ...) vám umožní zavolat červenou metodu objektu obj.
Lingo má seznam tříd odpovídající klasickým datovým strukturám s důležitými automatizacemi.
třída žargonu | odpovídající údaje |
seznam | lineární pole |
propList | asociativní pole / struktura |
matice | 2-rozměrné pole |
směřovat | 2d vektor |
přímý | obdélník 2d |
vektor | 3D vektor |
přeměnit | 3D matice |
Třída seznamu obsahuje pole dynamické paměti. Tato pole jsou „jedno založená“, první index je roven 1. To umožňuje použití nuly jako nulového identifikátoru při odkazování na indexy.
Při zápisu nebo čtení obsahu buňky je operace stejně těžká jako tečkovaná syntaxe (u velkých seznamů pomalejší než u malých). Chcete-li optimalizovat operace s maticemi, používejte matici algebry v maximální možné míře, čímž se vyhnete mnoha čtením buněk.
Seznamy se vytvářejí následovně:
myArray = [] nebo myArray = [1,2, "a", 0, "b"]Pole mohou obsahovat jakýkoli typ dat:
myArray = [[1, vektor (1,2,3)], [model1, obrázek12]] Některé metodyV tabulkách lze používat všechny typy operátorů kompatibilních s obsahem buněk. To umožňuje značné zrychlení výpočtových smyček, protože jsou pak spravovány nativně.
Příklady s celými čísly a desetinnými místy:
[1,2,3] + [4,5,6] vrací [5,7,9] [1,2,3] - [1,1,1] vrací [0,1,2] [1,2,3] * [1,2,3] vrací [1,4,9] [1,1] / [2,2,0] vrací [0,0,5] [1,1] mod [2,2,0] vrací [1,1] [1,2] > [2,1] vrátí hodnotu false (0)Příklady s polemi vektorů a matic najdete ve třídách vektorů a transformací.
Třída PropListObsahuje asociativní pole. Identifikátory mohou být buď:
Algebra je identická s lineárními seznamy.
Třída maticeKóduje dvourozměrné pole. Přidáno do verze 11 pro přistání fyzických motorů.
2D geometrické třídy Bodová třídaZakódujte 2D vektor. Jeho souřadnice se nazývají „locH“ a „locV“. Mohou být celé nebo desítkové.
p = bod (a, b)Data jsou čtena vlastnostmi locV / locH nebo jako pole:
p.locH nebo p [1] vrací a p.locV nebo p [2] vrací b2D vektorová algebra se chová přesně jako algebra pole a lze ji kombinovat s:
bod (1,1) + bod (2,2) vrací bod (3,3) [p1, p2] + [p3, p4] vrací [p1 + p3, p2 + p4] Třída přímáZakódujte obdélník. Hodnoty mohou být celé nebo desítkové.
: r = přímý (vlevo, nahoře, vpravo, dole) : r.left, r.top, r.right, r.bottom nebo r [1], r [2], r [3], r [4] návrat jeho souřadnice : r. šířka a r. výška vrátí jeho šířku a výšku
Některé metody:
r1.intersects (r2) vrací průsečík obdélníku mezi dvěma obdélníky point.inside (r1) vrací true, pokud je bod uvnitř obdélníku mapa (targetRect, sourceRect, destinationRect) provádí homothety bodu mapa (targetPoint, sourceRect, destinationRect) provádí homothety obdélníku rect1.union (rect2) vrací obdélník obklopující další dva obdélníkyAlgebra obdélníků je totožná s algebrou 2d bodů.
Quad třídaZakódujte čtyřúhelník. Užitečné zejména pro manipulaci s obrázky.
3D třídy geometrie Vektorová třídaZakódujte 3d vektor. Pouze desetinná čísla.
v = vektor (10,20,30)K jeho souřadnicím lze přistupovat dvěma způsoby: buď s vlastnostmi x, y, z, nebo s indexem kóty:
vx nebo v [1] vrátí 10Některé metody:
vector.magnitude vrací délku vector.normalize () mu dává délku rovnou 1 beze změny směru vector1.cross (vector2) vrací součin dvou vektorůAlgebra 3d vektorů se liší od algebry seznamů a 2D vektorů:
Algebru vektorů lze kombinovat s algebrou polí.
[vektor (1,0,0), vektor (0,1,0)] + [vektor (0,1,0), vektor (1,0,0)] vrátí [vektor (1,1,0), vektor (1,1,0)] [vektor (1,0,0), vektor (0,1,0)] * [vektor (0,1,0), vektor (1,0,0)] vrátí [0,0] Třída transformaceZakóduje 3d transformační matici složenou ze 16 desetinných míst.
matice = transformace ()První 3 skupiny se 4 čísly kódují 3 vektory souřadnicového systému. Poslední skupina kóduje počátek. (dále jen 4 th počet těchto skupin se používá pro interní výpočty).
Příklad: vyberte vektor (0,0,1) pro osu X:
matice [1] = 1 matice [2] = 0 matice [3] = 0Některé metody:
matrix.invert () převrátí matici matrix.inverse () vrací inverzní funkci matice matrix.rotate () matrix.translate () provádí absolutní transformaci matrix.preRotate () matrix.preTranslate () provede relativní transformaci matrix1.multiply (matrix2) vrací matici 2 transformovanou maticí 2 matrix1.preMultiply (matrix2) vrací matici 2 transformovanou maticí 1 na relativní matrix1.interpolate (matrix2, procento) vrací interpolaci mezi dvěma transformacemiMaticová algebra:
matrix1 * matrix2 je ekvivalentní násobení matrix * vector vrací vektor transformovaný maticíMaticovou algebru lze také kombinovat s poli:
[matrix1, matrix2] * [vector1, vector2] vrací pole transformovaných vektorů [matrix1, matrix2] * [matrix3, matrix4] vrací pole transformovaných maticPodtřída „člena“, která se zobrazuje jako sprite a umožňuje vykreslení 3D scény pomocí DirectX nebo OpenGL
Následuje vzor „továrního“ typu: všechny prvky 3D scény jsou instancovány a zničeny pomocí metod třídy scény. Zde je několik:
Třída modelu zdrojeVe výchozím nastavení ukládá vertexbuffery ("sítě") a odkazy na shadery.
Poznámka: jeho konstrukční metody nesledují strukturu vertexbufferu, každý trojúhelník se zadává samostatně. Po volání metody build () jsou vektory tříděny podle skupin pomocí stejného shaderu, výsledné vertexBuffers jsou přístupné pomocí modifikátoru #meshDeform modelů využívajících prostředek.
Třída modeluOdkazuje na matici, seznam shaderů a zdroj modelu. Automaticky generuje boundingSphere. Třída modelu se používá k zobrazení modeluResource. Jeho modifikátor #meshDeform poskytuje přístup k vertexBuffer modeluResource.
Třída PhysxUmožňuje vám ovládat 3D scénu pomocí enginu nvidia physx. Podtřída dalšího člena, ovládací prvky jako klasický xtra skript.
Následuje tovární vzor, který vám umožňuje vytvářet různé fyzické objekty: konvexní, konkávní, hadřík, znak atd. Vyžaduje modifikátor #meshDeform ke čtení polygonových struktur.
V Lingu existují 4 typy skriptů, dva procedurální, dva objektové:
Používejte pouze globální proměnné a funkce. Jejich použití musí zůstat omezené, protože globální proměnné spotřebovávají cpu a ram: jsou duplikovány v interpretaci javascript.
Objektové skripty se používají co nejvíce, procedurální skripty pouze v případě potřeby.
Toto jsou skripty používané pro procedurální kód.
Tyto skripty přijímají některé předdefinované funkční události, které odpovídají otevření aplikace, jejímu zavření, obnově obrazu.
Zahajovací a závěrečné akce:
Události obnovení obrázku:
Nezávislá událost:
Myší události:
Jedná se o skripty, které jsou přímo uvnitř herce. Jejich typ není definován, ale fungují jako „filmové skripty“.
Přijímají události myši a aktualizace, když je viditelná instance herce.
Umožněte simulovat třídy objektů. Syntaxe metod zůstává procedurální: jako první argument musíte předat odkaz na objekt „me“.
instantní třída příklad instančního nadřazeného skriptu: -- propriétés property pNombre -- méthodes constructeur et destructeur on new me, n , obj pObject = obj pNombre = n return me end on delete me pObject = void end -- méthodes utilisateur on incremente me pNombre = pNombre +1 endPokud se tomuto skriptu říká „číslo“, vytvoříme jej instanci například tímto způsobem:
monNouveauNombre = new(script "nombre", 10, obj)a jeho funkci „přírůstku“ vyvoláme tímto způsobem:
monNouveauNombre.incremente() statická třídaNadřazený skript může sloužit jako statická třída.
K jeho referencím přistupujeme takto:
myStaticClass = Script("script_name") dědictvíLingo dědičnost nefunguje jako v klasických jazycích objektů, je založena na vlastnosti „předchůdce“ nadřazených skriptů, což odpovídá instanci nadřazené třídy. Nejde tedy o otázku dědičnosti, ale o přetížení.
Director se automaticky vrací k vlastnostem objektu předchůdce z podřízené reference, což umožňuje najít efekt zděděné třídy. Věnujte tedy pozornost hodnotě argumentu „já“: musí vždy odpovídat instanci poslední generace.
To nefunguje u všech vlastností a metod tříd nativních ředitelů (v takovém případě musíte ukázat na předka).
Příklad simulace podtřídy Seznamuproperty ancestor on new ( me ) -- sous classe de l'objet list ancestor = [1,10,20,30] return me -- attention: on ne renvoie pas "ancestor" mais "me" end obj=new Script( "testClass" ) put obj[ 1 ] -- on retrouve les propriétés de l'ancestorJedná se o složité objekty, jejichž skript není přímo přístupný. Obsahují mnoho událostí, které umožňují interakci se skřítky, myší, klávesnicí, například pro vytváření tlačítek nebo textových editorů.
Skripty chování jsou často vyvíjeny pro opětovné použití grafickými designéry nebo integrátory. Pouhým přetažením jsou tyto skripty připojeny k objektům ve scéně: obraz, sprite, herec, rám ... Tyto skripty mají předdefinované funkce, které vám umožňují ručně konfigurovat instance i komponenty Flash .
Lingo je patentovaný jazyk, takže existuje pouze jedna implementace.
Od verze MX2004 přijímá software Director použití dvou různých jazyků: Lingo a implementaci JavaScriptu / ECMAScript, která provádí velkou část operací lingo.