Navigace

Hlavnφ menu

 

Kurz SVG - animace (dynamika zm∞ny hodnot)

Mßte p°ed sebou dalÜφ d∙le₧it² Φlßnek o animovßnφ vektorovΘ grafiky v 2D prostoru pomocφ formßtu SVG, rozebφrajφcφ °φzenφ dynamiky zm∞n hodnot r∙zn²ch prvk∙.

Ovlßdßnφ dynamiky zm∞ny hodnot

Dynamika - zp∙sob jak se m∞nφ animovanΘ hodnoty. I kdy₧ se velmi Φasto v∙bec nebudete muset tφmto problΘmem zaobφrat, pozd∞ji, zvlßÜt∞ p°i modelovßnφ realistickΘho pohybu, dojdete k pot°eb∞ jemn∞jÜφho ovlßdßnφ rychlosti a zrychlenφ objektu.

Atribut calcMode - nepovinn² atribut urΦujφcφ zp∙sob interpolace hodnot, mo₧nΘ hodnoty jsou:

  • discrete - skokovß zm∞na hodnoty mezi definovan²mi klφΦov²mi body animace (vyzkouÜejte si nßzornou demonstraci, zdroj: Adobe).
  • linear - aktußlnφ hodnota je v ka₧dΘm okam₧iku urΦena jednoduchou lineßrnφ interpolacφ mezi dv∞ma definovan²mi klφΦov²mi body animace (v²chozφ hodnota).
  • paced - konstantnφ krok (rychlost) po celou dobu trvßnφ animace. Zp∙sob jen zdßnliv∞ shodn² s p°edchßzejφcφm bodem se uplatnφ pouze pro p°φpady, kdy lze mezi klφΦov²mi body m∞°it vzdßlenost (v matematickΘm, nejen fyzikßlnφm smyslu). Pokud je nastaven typ "paced", budou ignorovßny atributy keyTimes a keySplines. Tato metoda je v²chozφ pro prvky animateMotion. K lepÜφmu pochopenφ vßm m∙₧e dob°e poslou₧it druh² nebo Φtvrt² p°φklad z p°edchozφho Φlßnku (nebojte se zm∞nit typ interpolace a vyzkouÜet v ASV).
  • spline - Φasov² pr∙b∞h hodnot je definovßn pomocφ kubickΘ BΘzierovy k°ivky.

Atribut values - seznam hodnot, kter²ch bude animace postupn∞ nab²vat, p°iΦem₧ jednotlivΘ animaΦnφ kroky jsou odd∞leny st°ednφky. Pokud je tento seznam pou₧it, zp∙sobφ ignorovßnφ atribut∙ from, to a by - v tomto p°φpad∞ rovn∞₧ velice doporuΦuji p°ebyteΦnΘ parametry v∙bec neuvßd∞t, aby nedochßzelo k n∞jak²m p°ehmat∙m.

Atribut keyTimes - seznam Φas∙ odd∞len²ch st°ednφky umo₧≥uje m∞nit rychlost zm∞ny v pr∙b∞hu animace. Atribut musφ b²t v₧dy pou₧it ve spojenφ s hodnotami values, p°iΦem₧ ka₧dß hodnota ze seznamu values mß p°i°azen sv∙j klφΦov² Φas uveden² jako desetinnΘ Φφslo v rozsahu od 0 (poΦßtek animace) do 1 (konec). A tribut je ignorovßn, pokud je souΦasn∞ nastaven calcMode="paced".

Atribut keySplines - jejich funkce je dopl≥kovß k atributu keyTimes (proto musφ b²t nastaveny oba seznamy souΦasn∞), s jedin²m rozdφlem, ₧e v seznamu nejsou klφΦovΘ Φasy, n²br₧ sady Φty° °φdicφch bod∙ x1 y1 x2 y2 v rozsahu 0 a₧ 1, kterΘ pomocφ kubick²ch BΘzierov²ch k°ivek urΦujφ dynamiku zm∞ny hodnot mezi dv∞ma klφΦov²mi Φasy - proto takΘ tento seznam bude v₧dy o jednu sadu hodnot kratÜφ ne₧ oba p°edchßzejφcφ. Pokud nenφ souΦasn∞ nastaven calcMode="spline", je atribut ignorovßn.

Pro pochopenφ funkce keySplines je t°eba si p°edstavit sou°adnici x jako Φasovou osu pro dan² ·sek animace a y pak jako osu pro v²slednou hodnotu animace, p°itom y=0 odpovφdß poΦßteΦnφ hodnot∞ animovanΘ hodnoty a y=1 je koneΦnß hodnota.

P°φklad:

<animate dur="5s" attributeName="cy"
      values="0;10" keyTimes="0;1"
      calcMode="spline" keySplines="0 0 1 1" />
<animate dur="5s" attributeName="cy"
      values="0;10" keyTimes="0;1"
      calcMode="spline" keySplines=".5 0 .5 1" />
<animate dur="5s" attributeName="cy"
      values="0;10" keyTimes="0;1"
      calcMode="spline" keySplines="0 .75 .25 1" />
<animate dur="5s" attributeName="cy"
      values="0;10" keyTimes="0;1"
      calcMode="spline" keySplines="1 0 .25 .25" />

Tento pohybliv² SVG obrßzek (zdroj: Adobe) ilustruje efekt keySplines pro Φty°i hodnoty nastavenφ, uvedenΘ v p°edchßzejφcφm rßmeΦku.

Element AnimateMotion

Pohyb po p°eddefinovanΘ dvourozm∞rnΘ k°ivce.

Atributy:

  • calcMode - mo₧nΘ hodnoty: discrete, linear, paced, spline - popis viz v²Üe.
  • path - prvek obsahuje data pro vektorovou cestu urΦujφcφ pohyb animovanΘho objektu, "motion path" se zapisuje zcela stejn∞ jak ji₧ d°φve vysv∞tlen² atribut "d" v prvku path.
  • keyPoints - obsahuje st°ednφky odd∞len² seznam desetinn²ch Φφsel (klφΦov²ch bod∙) v rozsahu od 0 do 1 a urΦuje, jak daleko na cest∞ se mß pohybujφcφ se objekt nachßzet v p°φsluÜnΘm Φase, ulo₧enΘm v seznamu klφΦov²ch bod∙ animace keyTimes, viz v²Üe.
  • rotate - urΦuje zp∙sob natßΦenφ objektu ve vztahu k cest∞ po kterΘ se pohybuje:
    • auto - objekt se natßΦφ ve sm∞ru teΦny pohybovΘ k°ivky (tedy v ji₧ zmφn∞nΘm p°φkladu s autem animovan²m na silnici v pohledu shora se bude automobil sprßvn∞ otßΦet p°φdφ ve sm∞ru jφzdy)
    • auto-reverse - stejn∞ jako "auto", ale objekt je navφc otoΦen o 180 stup≥∙
    • "·hlovß_hodnota" - pokud zadßte ·hel m∞°en² od osy x, animovan² objekt bude stßle zachovßvat toto natoΦenφ; v²chozφ hodnota je 0

Animaci podΘl M÷biovy k°ivky a r∙znß nastavenφ "rotate" ukazuje tento SVG k≤d:


<svg width="320" height="240" viewBox="0 0 400 300">
<title>
9.10 Ukazuje funkci 'animateMotion' a atr. 'rotate'
</title>

<defs>
  <desc>
    Diky pouziti teto cesty jako knihovniho symbolu
    v prvcich 'use' a 'mpath' lze usetrit velmi
    dlouhy kod, jelikoz cesty nakreslene v graf.
    programech mohou obsahovat mnoho bodu.
  </desc>
  <path id="cesta1" style="fill:none; stroke:silver;
    stroke-width:2; stroke-dasharray:4,4;"
     d="M115.015,88.229c85.714,0,85.714,125,
       171.429,125c85.714,0,85.714-125,0-125
       c-85.715,0-85.715,125-171.429,125
       c-85.715,0-85.715-125,0-125z"/>
</defs>

<g id="platno">
  <path style="fill:none;stroke:blue;"
    d="M399,299h-398v-298h398v298z"/>
</g>

<use xlink:href="#cesta1"/>

<text style="fill:red;font-size:24;">
  auto
  <animateMotion dur="5s" repeatCount="indefinite"
      rotate="auto-reverse">
    <mpath xlink:href="#cesta1"/>
  </animateMotion>
</text>

<text style="fill:purple;font-size:24;">
  45st
  <animateMotion dur="5s" repeatCount="indefinite"
      rotate="45">
    <mpath xlink:href="#cesta1"/>
  </animateMotion>
</text>

</svg>

Sm∞r pohybu lze zadßvat i jednoduÜeji, pomocφ obligßtnφch atribut∙ "from", "by", "to", jejich hodnoty jsou v tomto p°φpad∞ tvo°eny pßry hodnot odd∞len²ch mezerou nebo Φßrkou, nap°φklad from="33,15". DalÜφ mo₧nost pomocφ ji₧ znßmΘho atributu "values" m∙₧e vypadat n∞jak takto values="10,20;30,20;30,40" nebo values="10mm,20mm;30mm,20mm;30mm,40mm".

I kdy₧ teoreticky mohou b²t nastaveny "values" souΦasn∞ s "keyPoints" nebo dokonce i s "from/by/to", siln∞ nedoporuΦuji jakΘkoli duplicitnφ definice - nejen, ₧e to zbyteΦn∞ zv∞tÜuje v²sledn² soubor, ale snadno to m∙₧e vΘst k zßke°n²m omyl∙m p°i editaci.

Alternativnφ definice pohybovΘ k°ivky - mpath

Tento prvek musφ b²t vno°en uvnit° elementu animateMotion.

Atributy:

  • xlink:href - URI odkaz na prvek path, pokud je tento odkaz definovßn, mß p°ednost p°ed atributem path v rodiΦovskΘm elementu animateMotion.

Vzdßlenost podΘl cesty

Nejenom p°i pohybu po k°ivce, ale i p°i n∞kter²ch dalÜφch grafick²ch operacφch (jako t°eba umφs¥ovßnφ textu na k°ivku) je pot°eba vypoΦφtat dΘlku m∞°enou podΘl konkrΘtnφ k°ivky. Matematickß v∞da to samoz°ejm∞ umφ, ale jeliko₧ se v ₧ßdnΘm p°φpad∞ nejednß o jednoduchΘ v²poΦty, norma nenutφ prohlφ₧eΦe implementovat absolutn∞ p°esnΘ °eÜenφ.

Mφsto toho je nabφdnuta alternativnφ mo₧nost pou₧φt dodateΦn² atribut "pathLength", ve kterΘm autor prohlφ₧eΦi sd∞lφ skuteΦnou dΘlku dotyΦnΘ k°ivky, kterß pak bude zp∞tn∞ prohlφ₧eΦem pou₧ita pro umφs¥ovßnφ objekt∙ podΘl k°ivky. Pou₧itφm tohoto atributu by se m∞ly zcela eliminovat mo₧nΘ drobnΘ rozdφly mezi prohlφ₧eΦi od r∙zn²ch v²robc∙.

Kreslicφ p°φkazy "moveto" majφ pro ·Φely v²poΦtu dΘlky k°ivky dΘlku 0!

Kurz SVG - tvorba vektorovΘ grafiky v XML

Pokud u₧ mßte dost suchΘ teorie Scalable Vector Graphics, nenφ nic sna₧Üφho, ne₧ se vrhnout na praktickΘ testovßnφ jeho mo₧nostφ. Kurz SVG vßm usnadnφ osvojenφ zßkladnφch struktur a vlastnostφ tohoto jazyka pro prßci s vektorovou grafikou. Tato sΘrie Φlßnk∙ dosud nebyla ukonΦena!

Hejral, Martin (12. 10. 2004)