Rouška tajemství poodhalena: nepublikované funkce Flash 5, 1. díl - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Poptávka práce


Webdesign

Rouška tajemství poodhalena: nepublikované funkce Flash 5, 1. díl

2. srpna 2001, 00.00 | V dnešním pokračování seriálu "Skriptování pro středně pokročilé" si ukážeme využití jedné z nedokumentovaných funkcí Flash 5 na příkladu vytvoření jednoduché gamesky.

Ponechme stranou otázky typu PROČ zůstaly některé funkce Flash 5 nepublikovány (tj. nenajdete je v manuálu) a raději se věnujme tomu, k čemu nám vlastně mohou pomoci.

Save příkaz
Určitě jste si už nejednou lámali hlavu s tím, jak uložit třeba výsledky ankety nebo skóre hry na uživatelův disk.

Je třeba předeslat, že zápis na uživatelův disk z Internetu je VELICE citlivá věc a že jde o bezpečí uživatele. Proto Flash NEOBSAHUJE žádné funkce, které by umožnily z Internetu přímý přístup na uživatelův disk. Chcete-li zapisovat na uživatelův disk, můžete například použít cookies (tedy spolupráci javascriptu a Flash) nebo serverside aplikace, pomocí kterých můžete zapisovat informace o uživateli na server.

Co ale v případě stand-alone aplikace, která používá projektor? Nechám třeba uživatele, aby si stáhl z webu nějakou hru a chci mu dát možnost ukládat skóre... nebo si vytvořím něco na způsob miniaturní databáze, která se mi nechce stavět v jiném prostředí.... těch možností může být nekonečně... a JDE TO! Ano, Flash projektor UMÍ zapisovat na uživatelův disk, ačkoliv v dokumentaci k tomu nenajdete žádný popis.
Princip je zcela jednoduchý, podívejte se na příkaz, umístěný na tlačítku:

on (release) {
fscommand ("save", "skore.txt")
}

Co se stane, když stisknete takové tlačítko? Vytvoří se soubor se jménem skore.txt a do něj se uloží všechny proměnné z _root. Když si otevřete tento soubor v textovém editoru, vypadá například takto:

&nejlepsiVysledek=250
&nejlepsiCas=25
&pocetHracu=15

Znaky "&" neboli amperstandy uvozují jednotlivé proměnné. To je formát, který Flash umí zase načíst bez problémů zpátky.

Při tvorbě projektu, který používá ukládání dat na uživatelův disk, tedy postupujeme takto:

  1. všechny proměnné, které chci uložit, musím přesunout na _root (pokud nevíte o co jde, podívejte se na můj tutorial Definice cest k objektům). Dejte pozor na to, abyste si přetahali na _root opravdu všechno, co chcete uložit, i proměnné z jednotlivých MC. Můžete si pomoci třeba tím, že přiřadíte tlačítku odpovídající skripty. V následujícím případě, kdy třeba střílíte po létajícím talíři, obsahuje klip "letajiciTalir" proměnnou "pocetZasahu", se kterou budete pracovat dál, třeba ji přepočítávat na skóre. Skript pak bude vypadat takto:
    on (release) {
    _root.skore = _root.letajiciTalir.pocetZasahu*1000
    fscommand ("save", "skore.txt")
    }
  2. Chcete-li dát uživateli možnost například zapsat svoje jméno, uděláte to následujícím způsobem - třeba po ukončení hry přesuňte uživatele na poslední frame. Na tomto frame vytvořte Input Text Field, dejte mu název třeba "jmenoHrace". Nyní se vám po stisknutí tlačítka uloží do textového souboru i tato proměnná. Jistě vás ale napadne, že tak by se soubor jenom přepisoval a nepřidával nové hráče. Tomu se budeme věnovat v závěru článku, kde si postavíme celý ukázkový soubor.
  3. Chcete-li číst soubor, který jste si z Flashe uložili, jednoduše použijete akci loadVariables. Musíte dát ovšem pozor na fakt, že samotné načtení textového souboru ještě neznamená, že máte načtené proměnné použitelné! V ukázkovém souboru tento problém osvětlím blíže.
  4. Aby byly všechny proměnné použitelné ve formě například "top 10 score", budeme muset použít také další skripty, které nám pomohou třídit výsledky, zapsat je do textového souboru a nakonec je zobrazit.
  5. NEZAPOMEŇTE že Save příkaz NEFUNGUJE při testování .fla souboru pomocí CTRL + Enter, ale že musíte testovat skutečný stand-alone projektorový soubor!

Tak, a teď hurá na ukázkový soubor. Hmmm, jak vidíte, s grafikou jsem se příliš nepáral, když si stáhnete ukázkový soubor zde, někteří z vás možná upadnou hrůzou do bezvědomí :o))) .... ale jde především o ukázky skriptů, takže se mi opravdu nechtělo plýtvat časem na vytváření grafiky. Ovšem případné zdrcující kritiky na grafickou úroveň můžete připojit dolů pod článek :o)))))

Ukázkový soubor je vlastně taková primitivní hra, na které si ukážeme i další pokročilejší skriptovací techniky.

Hra spočívá ve střelbě na náhodně pohybující se létající talíř. Po ukončení časového limitu se vyhodnotí vaše skóre a pokud je lepší než nejvyšších deset, zapíšete svoje jméno, které se objeví v tabulce a zároveň se uloží na disk.

První krok: vytvoření herní scény

  1. vytvořte si scénu 800 x 600, 24 fps
  2. nakreslete si objekt létajícího talíře, vytvořte z něj MC se jménem "letajiciTalir", dejte mu stejné instance name a strčte jej na horní okraj scény
  3. nyní letajiciTalir rozpohybujeme ze strany na stranu pomocí náhodně generovaných čísel:
    onClipEvent (load) {
    //pri nacteni klipu se precte hodnota startovniho casu
    startCas = getTimer()
    //vygeneruje se prvni hodnota casoveho intervalu
    interval = 1000*Math.random()
    //nastavi se hodnota kroku, o ktery se bude MC pohybovat smerem do stran
    krok = 10
    }

    onClipEvent (enterFrame) {
    //pri kazdem pruchodu snimku se MC posune o hodnotu krok
    this._x += krok

    if (this._x < 0 || this._x > 800) {
    //pokud se MC dostane mimo obrazovku, obrati se smer pohybu...
    krok = -krok
    //...vygeneruje se startovni cas a novy casovy interval
    startCas = getTimer()
    interval = 300 + 2000*Math.random()
    }

    if (getTimer() - startCas > interval) {
    //pokud vyprsel casovy interval, obrati se smer pohybu
    krok = -krok
    //a vygeneruje se startovni cas a novy casovy interval
    startCas = getTimer()
    interval = 300 + 2000*Math.random()
    }

    }
    Jak vidíte, skript je založený na principu "urči časový interval jako náhodné číslo, po dobu tohoto intervalu pohybuj MC daným směrem, po uplynutí obrať směr a generuj nový časový interval".

    Otestujte pomocí Ctrl+ENTER, a letajiciTalir by se vám měl pohybovat nepravidelně ze strany na stranu.
  4. Nyní si vytvoříme ve spodní části scény dělo, kterým budeme po létajícím talíři střílet. Vytvoříme si kresbu, uděláme z ní MC "delo" a použijeme skript:
    onClipEvent (mouseMove) {
    this._x = _root._xmouse
    updateAfterEvent()
    }

    Tento skript bude kopírovat pozici kurzoru ve vodorovném směru a pomocí updateAfterEvent zajistíme plynulé a hladké překreslování objektu nezávisle na rychlosti snímkování.
    Po otestování by se vám v horní části scény měl pohybovat létající talíř, ve spodní části bude dělo kopírovat pozici vašeho kurzoru.

  5. Nyní si vytvoříme funkci, která bude střílet náboje z děla. Nejdříve si vytvoříme náboj: z kresby udělejte MC se jménem "strela" a smažte objekt ze scény. Abychom si skript zjednodušili, nadefinujeme, že na obrazovce se bude pohybovat vždy jen jedna střela.

    Střelu vystřelíme z děla stiskem levého tlačítka myši. K tomu použijeme metodu "připojení MC z knihovny". Doplněný skript na MC "delo" bude vypadat takto:

    onClipEvent (load) {
    //definujeme booleanskou promennou, ktera bude hlidat
    //zdali je na scene jen jedna strela
    jenJednaStrela = true
    }

    onClipEvent (mouseMove) {
    this._x = _root._xmouse
    updateAfterEvent()
    }

    onClipEvent (mouseDown) {
    //pokud je stisknuto leve tlacitko mysi
    if (jenJednaStrela) {
    //neni-li na scene zadna strela, pripojime MC z knihovny
    _root.attachMovie("naboj", "n", 1)
    //nastavime jeho souradnice
    _root.n._x = this._x
    _root.n._y = this._y - this._height/2
    //a zakazeme vypoustet dalsi strely
    jenJednaStrela = false
    }
    }

    Booleanská proměnná jenJednaStrela nám bude neustále hlídat, zdali je na scéně letící střela (pak je proměnná "false"), pokud tomu tak je, nebude povoleno vystřelení další střely.

    Abychom mohli MC z knihovny připojit, musíme samozřejmě symbol vyexportovat (Pravý klik na MC v knihovně > Linkage > Export this symbol > zapište jméno "n").

    Aby se nám střela pohybovala, musíme její pohyb nadefinovat. Otevřeme si tento MC z knihovny, přidáme jeden frame a nyní na oba framy použijeme následující skript:

    //posuneme vertikalni pozici o 25 bodu smerem nahoru
    this._y = this._y - 25
    //pokud vyletne strela mimo scenu, povolime novy vystrel a odstranime starou strelu
    if (this._y < 0) {
    _root.delo.jenJednaStrela = true
    this.removeMovieClip()
    }

    Nyní si celou scénu otestujeme. Po stisknutí levého tlačítka myši by měla z děla vylétnout střela.

  6. Nyní budeme detekovat, zdali střela trefila létající talíř. K tomu použijeme jednoduchou metodu hitTest. Doplníme skript létajícího talíře takto (kurzivou je vyznačený přidaný skript):

    onClipEvent (load) {
    startCas = getTimer()
    interval = 1000*Math.random()
    krok = 10
    }


    onClipEvent (enterFrame) {
    this._x += krok

    if (this._x < 0 || this._x > 800) {
    krok = -krok
    startCas = getTimer()
    interval = 300 + 2000*Math.random()
    }

    if (getTimer() - startCas > interval) {
    krok = -krok
    startCas = getTimer()
    interval = 300 + 2000*Math.random()
    }

    //pokud je MC zasazen strelou
    if (this.hitTest(_root.n)) {
    //zvetsime proměnnou pocet zasahu o jednu
    pocetZasahu++
    //pripravime si promennou pocet bodu
    _root.casovac.pocetBodu = pocetZasahu*100
    //po zasahu povolime novy vystrel a puvodni strelu smazeme
    _root.delo.jenJednaStrela = true
    _root.n.removeMovieClip()
    }

    }
  7. Nyní si vytvoříme časovač, který bude sledovat a zobrazovat jak dlouho běží scéna a kolikrát jsme strefili létající talíř.

    Vytvoříme si dvě textová pole typu Dynamic Text, jedno z nich pojmenujeme "zbyvajiciCas", druhé "pocetBodu". Nad ně můžeme pomocí statického textu umístit odpovídající popisky.

    Nyní z toho všeho, co jsme právě vytvořili (dvě dynamická textová pole a jejich popisky) vytvoříme MC a pojmenujeme ho "casovac". Na něj umístíme následující skript:

    //pri nacteni klipu
    onClipEvent (load) {
    //schovame mys, aby se nam nepletla na scene
    Mouse.hide()
    //nacteme hodnotu startovniho casu
    startCas = getTimer()
    //stanovime casovy limit pro jednu hru v milisekundach
    casovyLimit = 20000
    //a vynulujeme pole s poctem bodu
    pocetBodu = 0
    }

    //pri kazdem pruchodu snimku
    onClipEvent (enterFrame) {
    //do textoveho pole zapiseme kolik casu ve vterinach zbyva do ukonceni hry
    zbyvajiciCas = Math.round((casovyLimit - (getTimer() - startCas))/1000)
    //pokud uplynul stanoveny cas
    if (zbyvajiciCas <= 0) {
    //prevedeme textovou promennou na cislo a umistime na zakladni timelinu
    _root.noveSkore = parseFloat (pocetBodu)
    //smazeme posledni letici strelu
    _root.n.removeMovieClip()
    //a prejdeme na druhy snimek hlavni casove osy
    _root.gotoAndStop (2)
    }
    }

    Jak vidíte, skript je opět principiálně jednoduchý, vlastně jen hlídá kolik času uplynulo a porovnává uplynulý čas s časovým limitem. Po uplynutí limitu posune hlavní časovou osu na druhý snímek.

    Nyní můžeme otestovat jak naše movie funguje: vytvořte si na hlavní časové ose druhý snímek, který bude třeba prázdný, na první i druhý snímek hlavní časové osy umístěte skript stop(), aby se nám to celé nezacyklilo.

    Spusťte movie, nyní v jednom okně běží odečítající se čas, v druhém vám po zásahu létajícího talíře naskakují body. Po uplynutí limitu vám movie skočí na zatím prázdný frame.

    Tím máme celou jednoduchou gamesku hotovou a čeká nás třídění výsledků a jejich zápis na disk.

  8. Na druhý frame napíšeme nějakou hlášku typu "Konec hry". Nyní vytvoříme prázdný MC. Co to je? Pokud jste s něčím takovým ještě nesetkali, vězte, že je to taková šikovná pomůcka, která umožňuje řídit různé probíhající procesy. Vytvoříme jí tak, že nakreslíme libovolný tvar, uděláme z něj MC, ten okamžitě otevřeme a smažeme kresbu. Po jeho zavření nám na scéně zbude malé prázdné kolečko, které nám ukazuje kde se klip nachází. Ale ze všeho nejdřív si vytvoříme "datový" soubor, do kterého budeme ukládat a ze kterého budeme číst výsledky. Pomocí "Poznámkového bloku" nebo podobné windowsovské aplikace vytvoříme nový textový dokument "vysledky.txt". Abychom mohli testovat jednotlivé akce, uděláme hned ručně jednoduchou tabulku skóre, takže do souboru napíšeme:

    &skore=500*Pepa^1500*Franta^300*Jirka

    Tím jsme pro Flash nadefinovali "externí" proměnnou se jménem "skore", která bude obsahovat dvojice "počet bodů*jméno" (počet bodů a jméno jsou odděleny hvězdičkovým "identifikátorem"), tyto dvojice oddělíme znaky "^". Oddělovací znaky můžete samozřejmě použít libovolné.

    Nyní se dohodněme, že počet nejlepších dosažených skóre omezíme na 10. Výsledný textový dokument musíme umístit do adresáře, kde je uložené naše .fla.

    Tak, a nyní vytvoříme prázdný MC, o kterém jsem již hovořil, a na něj napíšeme následující skript:

    onClipEvent (load) {
    // pri nacteni klipu nacteme externi textovy soubor
    this.loadVariables ("vysledky.txt")
    }

    //kdyz jsou data korektne nactena
    onClipEvent (data) {
    //vytvorime si kopii skore, ktere dosahl soucasny hrac
    noveSkore = _root.noveSkore

    //nadefinujeme funkci, ktera nam pomuze tridit skore, nactene z externiho
    //textoveho souboru
    function seradDleBodu (a,b) {
    var index1 = a.indexOf("*")
    var index2 = b.indexOf("*")
    var body1 = parseFloat (a.substr(0,index1))
    var body2 = parseFloat (b.substr(0,index2))
    if (body1 < body2) {
      return -1
      }
    if (body1 == body2) {
      return 0
      }
    if (body1 > body2) {
      return 1
      }
    }
    //z externiho souboru se nam nacetla promenna "skore"
    //tu nyni "nasekame" na jednotlive casti
    //kazda s casti bude obsahovat dvojici typu "pocet bodu*jmeno hrace"
    //tyto časti vytvori pole (Array) se jmenem "vysledky"

    vysledky = skore.split("^")

    //pokud byl textovy soubor prazdny, vytvorime prazdne pole
    if (skore == void(skore)) {
    vysledky = new Array()
    }

    //zjistime, jak dlouhe je pole "vysledky"
    var j = vysledky.length
    //pokud je kratsi nez 10, doplni se na zbyvajici pozice do desitky
    //nulovy pocet bodu a "prazdne" jmeno hrace
    if (j < 10) {
      for (var i=0;i<=10-j;i++) {
      vysledky.unshift ("0*-----")
      }
    }

    //nyni pomoci funkce, kterou jsme nadefinovali vyse, vzestupne
    //setridime pole "vysledky"
    vysledky.sort(seradDleBodu)

    //precteme si prozatim nejnizsi dosazeny pocet bodu
    nejnizsiBodyIndex = vysledky[0].indexOf("*")
    nejnizsiBody = parseFloat (vysledky[0].substr(0,nejnizsiBodyIndex))

    //pokud soucasny hrac dosahl vice bodu, nez byl zatim nejnizsi vysledek
    //skocime na snimek, kde se bude moci soucasny hrac zapsat
    //v opacnem pripade skocime hned na snimek, kde zobrazime tabulku
    //nejlepsich deseti hracu
    if (noveSkore > nejnizsiBody) {
    _root.vysledky = vysledky
    _root.gotoAndPlay(3)
    } else {
    _root.vysledky = vysledky
    _root.gotoAndPlay(4)
    }

    }

    Mno, věřím, že některé z vás předchozí skript trochu vyděsil, ale nebojte se, vše je jednoduché, jen zápis vypadá složitě.

    Podívejme se blíže na některé části, které jsou pro vás možná méně obvyklé. onClipEvent (data) je "přepínač", který spustí následný skript až poté, když jsou všechna data korektně načtená. V našem případě je trochu nadbytečný, uvedl jsem jej zde jako ukázku. Nepostradatelný je u internetových aplikací, Flash totiž používá asynchronní načítání, takže občas se může stát, že se načte jen část dat a ta se zpracují dalším skriptem, čímž vznikne logicky chyba. onClipEvent (data) přepínač dokáže uhlídat, zdali jsou opravdu všechna data načtená a teprve pak povolí běh dalšího skriptu.

    Zajímavá je metoda "split", kterou jsem v našem souboru použili na "rozsekání" textové proměnné. Pokud vypadala textová proměnná "skore" po načtení takto:

    skore=500*Pepa^1500*Franta^300*Jirka

    po použití metody split se nám vytvoří nové pole (Array):

    vysledky = skore.split("^")

    tedy metoda vyhledá znaky "^" a použije je jako oddělovač. Vnikne následující Array jménem "vysledky":

    [500*Pepa,1500*Franta,300*Jirka]

    Toto Array nyní můžeme libovolně třídit, číst jeho jednotlivé elementy, zapisovat na vybranou pozici a podobně.

    Další užitečnou metodou je třídící funkce, pomocí které můžeme seřadit elementy pole libovolným předem definovaným způsobem. Například námi použitá funkce:

    function seradDleBodu (a,b) {
    var index1 = a.indexOf("*")
    var index2 = b.indexOf("*")
    var body1 = parseFloat (a.substr(0,index1))
    var body2 = parseFloat (b.substr(0,index2))
    if (body1 < body2) {
      return -1
      }
    if (body1 == body2) {
      return 0
      }
    if (body1 > body2) {
      return 1
      }
    }

    porovnává jednotlivé elementy pole takto:

    • vezme dva elementy
    • zjistí pozici, na které je umístěný znak "*"
    • z elementů vezme část od začátku do znaku "*" a převede ji z textu na číslo
    • nakonec se nadefinují kritéria pořadí pomocí hodnot 1, 0 a -1

    Další z použitých metod je "unshift". Tato metoda zařadí na začátek Array jeden nadefinovaný element. V našem případě, kdy potřebujeme přesně deset položek do tabulky nejúspěšnějších hráčů, si prostě zjistíme, jak je Array dlouhé a je-li menší než 10, "nastrkáme" pomocí smyčky na začátek "prázdné hráče" (nulové skóre, místo jména čárky).

    Za zmínku také stojí operátor "void". V našem případě je použitý pro detekci toho, zdali existuje proměnná "skore". Pokud by totiž byl textový soubor při prvním načtení úplně prázdný, neexistovala by proměnná "skore", neexistovalo by ani pole "vysledky" a celý skript by zkolaboval. Proto pokud zjistíme, že proměnná "skore" nebyla z externího textového souboru načtená, vytvoříme prázdné Array a pak už vše může běžet jako po drátku.

  9. Přejdeme na "výrobu" třetího snímku, na kterém bude moci hráč zapsat svoje jméno. Samozřejmě pokud má nárok dostat se mezi deset nejlepších.

    Nejprve vytvoříme textové pole typu Input Text. Omezíme jej na deset znaků pomocí Max. Chars, nastavíme jej jako Single Line a povolíme Border/Bg neboli zobrazení černého rámečku a bílého podkladu, abychom si ušetřili práci s "podkládáním" pozadí. Textové pole nazveme "noveJmeno".

    Nad textové pole umístíme hlášení, které vyzve uživatele k zápisu.
    Nyní na scénu umístíme další prázdný MC a na něj napíšeme tento skript:

    onClipEvent (load) {
    //pri nacteni klipu ukazeme kurzor
    Mouse.show()
    //nastavime kurzor do textoveho pole
    Selection.setFocus("_root.noveJmeno")
    }

    //pokud byla stisknuta nektera klavesa
    onClipEvent (keyDown) {
    //pokud stisknutou klavesou byl Enter
    if (Key.isDown(Key.ENTER)){

    //znovu pouzijeme tridici funkci pro razeni pole
    function seradDleBodu (a,b) {
    var index1 = a.indexOf("*")
    var index2 = b.indexOf("*")
    var body1 = parseFloat (a.substr(0,index1))
    var body2 = parseFloat (b.substr(0,index2))
    if (body1 < body2) {
      return -1
      }
    if (body1 == body2) {
      return 0
      }
    if (body1 > body2) {
      return 1
      }
    }

    //k poctu bodu, ktere dosahl soucasny hrac, pripojime jeho jmeno
    //z textoveho pole
    _root.noveSkore = _root.noveSkore + "*" + _root.noveJmeno
    //smazeme prvni element pole, zde je po setrideni pole nejnizsi dosazene skore
    //od predchozich hracu
    _root.vysledky.shift()
    //na prvni misto pole zapiseme noveho hrace a pocet bodu
    _root.vysledky.unshift(_root.noveSkore)
    //pole setridime dle poctu bodu
    _root.vysledky.sort(seradDleBodu)

    //presuneme se na posledni frame
    _root.gotoAndPlay(4)
    }
    }

    Zde použité metody jsou velmi podobné těm, které jsme použili na předchozím snímku. Metoda Selection.setFocus nám pomůže ošetřit takovou drobnou nepříjemnost: pokud totiž skript skočí na třetí snímek, kurzor je prostě "nikde" a hráč musí nejdříve kliknout do textového pole a pak teprve napsat svoje jméno. Selection.setFocus to udělá za něj a automaticky umístí kurzor do textového pole.

  10. A čeká nás poslední snímek s tabulkou deseti nejlepších. Zde si vytvoříme dvě textová pole typu Dynamic Text (a nezapomeňte je nastavit jako Multiline), první z nich pojmenujeme "jmena", druhé "body".

    Z těchto dvou textových polí vytvoříme jeden MC, který pojmenujeme třeba "ukladac" (protože nám mimo jiné uloží výsledky na hráčův disk).

    Na tento MC umístíme následujíc skript:

    onClipEvent (load) {
    //nejprve vynulujeme obe textova pole
    jmena = ""
    body = ""
    //a take promennou skore, kterou budeme zapisovat na disk
    _root.skore = ""

    //pole vysledky jsme zatim meli setridene vzestupne, nyni jej setridime opacne
    _root.vysledky.reverse()

    //pomoci smycky rozdelime pole vysledky na jmena a body
    for (i=0;i<10;i++) {
    index = _root.vysledky[i].indexOf("*")
    body = body + _root.vysledky[i].substr(0,index) + newline
    jmena = jmena + _root.vysledky[i].substr(index+1) + newline
    //zapiseme promennou skore, kterou budeme ukladat na disk
    //vsechny polozky budou oddelene pomoci znaku "^"
    // posledni polozka nesmi koncit timto znakem
    if (i<9) {
    _root.skore = _root.skore + _root.vysledky[i] + "^"
    } else {
    _root.skore = _root.skore + _root.vysledky[i]
    }
    }

    //smazeme nepotrebne promenne, ktere nechceme ukladat na disk
    delete (_root.vysledky)
    delete (_root.noveSkore)
    delete (_root.noveJmeno)

    //ulozime promennou skore na uzivateluv disk do souboru "vysledky.txt"
    fscommand ("save", "vysledky.txt")
    }

    Skripty v této části jsou velmi jednoduché, zmíním se jen o jedné maličkosti. Jak již bylo řečeno, chceme mít v textovém souboru proměnnou "skore" zapsanou v tomto formátu:

    &skore=500*Jirka^200*Pepa....

    Tuto proměnnou pak dělíme nejdříve na dvojice

    500*Jirka
    200*Pepa
    a následně oddělujeme body od jmen.

    Pokud by však posledním znakem proměnné byl znak "^", funkce, která nám rozsekávala proměnnou na dvojice by hledala za "^" další dvojici a skript by zabloudil. Proto je ve skriptu nadefinováno, že všechny položky budou oddělené pomocí "^", ale poslední položka bude zapsána bez tohoto oddělovače.

Uffff, tak jsme se všichni zapotili (nebojte, já určitě víc než vy :o)))), ale teď už je všechno hotovo. Nyní můžete experimentovat s textovým souborem, psát do něj různé počty bodů a sledovat, jak skripty zaplňují volná místa, jak se skóre hráčů třídí atd.

Nezapomínejte na to, že při testování souboru v prostředí Flash nefunguje Save command! Funguje jen ve vygenerovaném Stand Alone Projector .exe souboru!

Takže teď už vám nic nebrání vytvořit jednoduchou hru, která si umí zapisovat výsledky. Vymyslete si jiný herní scénář, vytvořte atraktivní grafiku... pošlete ji známým, klientům nebo ji dejte ke stažení na svůj web... cokoliv chcete.

Jen malé doporučení: já jsem to z didaktických důvodů neudělal, ale poradím vám ještě takovou praktickou drobnost. Aby si uživatel nemusel stahovat zároveň se hrou i textový soubor, bez kterého by skripty neběhaly regulérně, dejte na první snímek tento skript, který zkontroluje pomocí "void" existenci textového souboru a pokud tento neexistuje, pomocí fscommand ("save", "vysledky.txt") tento soubor vytvořte.

Jinak výše uvedené skripty lze samozřejmě napsat hutněji, tento soubor byl vytvářen tak, aby jednotlivé kroky byly logicky návazné a co nejsnáze pochopitelné.

Ještě jednou pro připomenutí: zdrojový soubor si můžete stáhnout zde.

A v příštím pokračování se podíváme na další nedokumentovanou funkci Flash 5!

Tématické zařazení:

 » Rubriky  » Go verze  

 » Rubriky  » Webdesign  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: