Uživatelské nástroje

Nástroje pro tento web


vyuka:vos3_-_ukol_9

Úkol 8

Při tvorbě tohoto úkolu využijte podmínky (kdy se naplní nádrž, kdy kohoutky tečou) i generování událostí.

Viz. Podmínky (if) - flash a Vytváření vlastních událostí - flash

Pro přehrání obsahu potřebujete Adobe Flash Plugin.

Datum odevzdání úkolu: 2.12.2011

Kohoutky - řešení

Vytváříme swf s nádrží a dvěma kohoutky - vrchním kohoutkem voda přitéká, spodním odtéká. Nádrž se může naplnit nebo vyprázdnit, je také možné aby protékala plná nebo prázdná nádrž.

Z actionsriptu využijeme:

{{ :vyuka:hollarka_studenti:procvicovani_kohoutky_cs5_hotovo.swf?200x123 |

Využijeme tedy tyto objekty:

  • kohoutek - 2 instance * : horní kohoutek = kohoutekH_mc, dolní kohoutek kohoutekD_mc
  • nádrž - nadrz_mc
  • vodu, která teče z kohoutků - 2 instance: vodu z horního kohoutku = vodaH_mc, vodu z dolního kohoutku = vodaD_mc

Movieclipy:

Kohoutek

potřebujeme, aby se kohoutek otevíral a zavíral - bude mít tedy dva stavy, otevřený a zavřený. Pro lepší názornost bude jeho vrchní část různě zabarevná (červený zavřený, zelený otevřený).

Mezi oběma stavy potřebujeme „mezi stav“, přechod. Přechody pojmenováváme takto:

jménoStavuZKteréhoVychází_jménoStavuKdeKončí

Schematicky vypadá časová osa našeho movieclipu takto:

Rozdělení stavů a přechodů na časové ose:

Časová osa s vypsaným actionscriptem:

Na každém stavu je stopka, aby se tam časová osa zastavila a zůstala stát, na konci přechodů je vždy gotoAndStop(stav, kde se má děj zastavit)

Voda

vodaH_mc a vodaD_mc jsou proudy vody, které tryskají z jednotlivých kohoutků.

Mají dva stavy - tece, netece a přechody mezi nimi- netece_tece, tece_netece

Časová osa s vypsaným actionscriptem:

Nádrž

nadrz_mc má dva stavy - prazdna a plna, a dva přechody - prazdna_plna, plna_prazdna U nádrže potřebujeme vytvořit vlastní události, abychom věděli, kdy se nádrž naplnila a kdy se vyprázdnila.

Scéna:

Nyní máme na scéně dva kohoutky - instance stejného symbolu - kohoutekH_mc, kohoutekD_mc, dvě vody (na náhledu nejsou vidět, protože jsou kohoutky zavřené) vodaH_mc, vodaD_mc a nádrz nadrz_mc

Actionscript:

import flash.events.MouseEvent;
 
//na začátku musíme všechny movieclipy zastavit, aby se nám samovolně nepřehrávaly:
 
kohoutekH_mc.stop();
kohoutekD_mc.stop();
nadrz_mc.stop();
 
//movieclipy na které lze klikat (kohoutky se poté spustí) chceme označit "pacičkou" jako tlačítka:
 
kohoutekH_mc.buttonMode = true;
kohoutekD_mc.buttonMode = true;
 
//posluchače, které přidávají kohoutkům funkce na kliknutí:
 
kohoutekH_mc.addEventListener(MouseEvent.CLICK, kohoutky);
kohoutekD_mc.addEventListener(MouseEvent.CLICK, kohoutky);
 
//posluchače, které reagují na úplně naplnění, nebo vypuštění nádrže
 
nadrz_mc.addEventListener("KONEC_prazdna_plna",vlastni);
nadrz_mc.addEventListener("KONEC_plna_prazdna",vlastni);
 
//funkce ovládající otevírání a zavírání kohoutků
 
function kohoutky(e:MouseEvent)
{
	if (e.currentTarget.stav == "otevreny") //e.currentTarget - zástupné volání objektu, který má reagovat, v našem případě "to, na co se teď kliklo"
        // tato podmínka tedy znamená "pokud proměnná stav, která je uvnitř objektu na který se kliklo, má hodnotu "otevreny", tak..."
	{
		e.currentTarget.gotoAndPlay("otevreny_zavreny"); //...to na co se kliklo přehraje "otevreny_zavreny"
	}
	else //v jakémkoliv jiném případě
	{
		e.currentTarget.gotoAndPlay("zavreny_otevreny"); //...to na co se kliklo přehraje "zavreny_otevreny"
	}
 
	nadrz(); //inicializace funkce nadrz - tedy krom vykonání kódu podmínky se vykoná i funkce nadrz
}

Schematicky vypadá funkce kohoutky následovně:

function vlastni(e:Event) //funkce, která se spustí ve chvíli, kdy se nádrž úplně naplní, nebo vyprázdní
{
	nadrz(); //inicializuje funkci nádrž
}
 
function nadrz() //definice funkce nadrz
{
//funkce nadrz má tři části - jednu, která ovládá animaci vodaH_mc, druhou, která ovládá vodaD_mc a třetí, která ovládá nadrz_mc
// tyto části jsou zapsány jako podmínky, všechny jsou oddělené 
 
//podmínka ovládající vodaH_mc
 
	if (kohoutekH_mc.stav == "otevira") //pokud se horní kohoutek otevírá
	{
		vodaH_mc.gotoAndPlay("netece_tece"); //horní voda začne téct
	}
	else if (kohoutekH_mc.stav == "zavira") //pokud se horní kohoutek zavírá 
	{
		vodaH_mc.gotoAndPlay("tece_netece"); //horní voda přestane téct
	}
 
//podmínka ovládající vodaD_mc
 
        //jestliže se dolní kohoutek otevírá nebo je otevřený a současně se horní kohoutek otevírá a nebo je otevřený
	if ((kohoutekD_mc.stav =="otevira" || kohoutekD_mc.stav == "otevreny")&& (kohoutekH_mc.stav =="otevira" || kohoutekH_mc.stav == "otevreny")) 
	{
		vodaD_mc.gotoAndPlay("netece_tece"); //dolní voda začne téct
	}
        //jestliže se dolní kohoutek otevírá, horní kohoutek je zavřený a současně je nádrž plná
	else if (kohoutekD_mc.stav == "otevira" &&  kohoutekH_mc.stav == "zavreny" && nadrz_mc.stav=="plna")
	{
		vodaD_mc.gotoAndPlay("netece_tece");  //dolní voda začne téct
	}
        //jestliže se dolní kohoutek zavírá a současně se horní kohoutek otevírá nebo je horní kohoutek otevřený a nebo je nádrž plná
	else if (kohoutekD_mc.stav == "zavira" && (kohoutekH_mc.stav =="otevira" || kohoutekH_mc.stav == "otevreny"  ||nadrz_mc.stav=="plna"))
	{
		vodaD_mc.gotoAndPlay("tece_netece");  //dolní voda přestane téct
	}
        // jestliže je dolní kohoutek otevřený a současně se horní kohoutek zavírá nebo je zavřený a současně je nádrž prázdná
	else if ((kohoutekD_mc.stav == "otevreny" )  && (kohoutekH_mc.stav =="zavira" || kohoutekH_mc.stav == "zavreny") && nadrz_mc.stav=="prazdna")
	{
		vodaD_mc.gotoAndPlay("tece_netece"); //dolní voda přestane téct
	}
 
//podmínky ovládající nadrz_mc
 
        //jestliže je nádrž prázdná a současně se horní kohoutek otevírá nebo je otevřený a současně je dolní kohoutek zavřený a nebo se zavírá	
	if (nadrz_mc.stav == "prazdna" && (kohoutekH_mc.stav == "otevira"||kohoutekH_mc.stav == "otevreny") && (kohoutekD_mc.stav == "zavreny"||kohoutekD_mc.stav=="zavira"))
	{
		nadrz_mc.gotoAndPlay("prazdna_plna"); //nádrž se naplní
	}
        // jestliže je nádrž prázdná a současně horní kohoutek otevřený a dolní kohoutek otevřený
	else if (nadrz_mc.stav=="prazdna" && kohoutekH_mc.stav=="otevreny" && kohoutekD_mc.stav=="otevreny")
	{
		nadrz_mc.gotoAndStop("prazdna"); //nádrž zůstane prázdná
	}
        // jestliže je nádrž plná a současně horní kohoutek zavřený, nebo se zavírá a současně dolní kohoutek otevřený, nebo se otvírá
	else if (nadrz_mc.stav=="plna" && (kohoutekH_mc.stav=="zavreny"||kohoutekH_mc.stav=="zavira") && (kohoutekD_mc.stav=="otevira"||kohoutekD_mc.stav=="otevreny"))
	{
		nadrz_mc.gotoAndPlay("plna_prazdna"); //nádrž se vyprázdní
	}
 
}

Schematický nákres funkce nadrz:

vyuka/vos3_-_ukol_9.txt · Poslední úprava: 2011/12/09 08:07 autor: verca