Uživatelské nástroje

Nástroje pro tento web


vyuka:kosticky_-_dynamicke_vytvareni_instanci_movieclipu

Dynamické vytváření instancí

První varianta

má vypadat takto: Pro přehrání obsahu potřebujete Adobe Flash Plugin.

Vytvořená mkostička má náhodnou barvu. Zde využíváme (ve funkci volané konstruktorem) funkci intit() která volá funkci nastavNahodnouBarvu().

Funkce nastavNahodnouBarvu() volá funkci randRange(min:Number, max“Number), která vátí celé číslo od min do max. Definice funkce je převzata z helpu: ¨

	//vrátí náhodné číslo od min do max
	private function randRange(min:Number, max:Number):Number {
		var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
		return randomNum;
	}

Konstruktor volá privátní metodu init, která inicializuje barvu vznikající kostičky tak, že volá metodu nastavNahodnouBarvu, která nastaví hodnotu vlastnosti barva na náhodně vyabrané číslo od 0 do 3. Výběr náhodného číslo od hodnoty min do hodnoty max se provándí voláním metody randRange(min:Number, max:Number):Number.

Třída Kostka má vlastnost barva - nastavování hodnoty této vlasdtnosti (pomocí function set barva je propojeno se změnou zobrazení kostičky, realizovanoui pomocí ¨¨funkce nastavBarvu(jakou:Number). Uvnitř této funkce je použit přepínač switch, který pomocí gotoAndStopposílá snímací hlavičku movieClipu na příslušné políčko filmu.

Aby nebylo nutno při nastavování vlastnosti barva si pamatovat hodnoty číselných konstant, které jsou prirazeny urcitým barvám, třída Kostka zveřejňuje konstanty CERVENA, MODRA, ZELENA, ZLUTA jako veřejné členské proměnné třídy (proto jsou typu static). Tyto konstanty je možné při nastavování hodnot vlastnosti barva využít místo číselných hodnot: např. místo názevInstance.barva=0 můžeme napsat názevInstance.barva=Kostka.CERVENA.

Celý kód třídy Kostka vypadá takto:

 
class Kostka extends MovieClip {
	//*****************************************
	//veřejné členské proměnné
	static var CERVENA:Number = 0;
	static var MODRA:Number = 1;
	static var ZELENA:Number = 2;
	static var ZLUTA:Number = 3;
	//*******************************************
	//privátní členské proměnné
	private var _barva:Number = CERVENA;
	//********************************************
	//Konstruktor
	function Kostka() {
		init();
	}
	//********************************************
	//Vlastnosti
	//********************************************
	function set barva(jakou) {
		nastavBarvu(jakou);
		_barva = jakou;
	}
	function get barva():Number {
		return _barva;
	}
	//*******************************************
	//Privátní metody
	//*******************************************
	//inicializace
	private function init() {
		//inicializace - zatím prázdné
		nastavNahodnouBarvu();
	}
	//
	//vrátí náhodné číslo od min do max
	private function randRange(min:Number, max:Number):Number {
		var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
		return randomNum;
	}
	//zobrazí kostičku barvy "jakou"
	private function nastavBarvu(jakou:Number) {
		switch (jakou) {
		case CERVENA :
			this.gotoAndStop("Cervena");
			break;
		case MODRA :
			this.gotoAndStop("Modra");
			break;
		case ZELENA :
			this.gotoAndStop("Zelena");
			break;
		case ZLUTA :
			this.gotoAndStop("Zluta");
			break;
		default :
			this.gotoAndStop("Cervena");
		}
	}
	//
	//***********************************************
	//Veřejné metody
	//***********************************************
	function nastavNahodnouBarvu() {
		this.barva = randRange(0, 3);
	}
}

Vytvoření nového movei clipu je generováno funkcí (v prvním framu):

function vytvorNovyMovieClip(){
	//vytvoří nový movieClip v hloubce 0
	this.attachMovie("Kostka", "kostka_mc", 0);
	// nastaví možnost tažení
	kostka_mc.onPress=function(){
		kostka_mc.startDrag();
	}
	kostka_mc.onRelease=function(){
			kostka_mc.stopDrag();
	}
}

Skript v prvním framu včetně testovacích tlačítek vypadá takto:

function vytvorNovyMovieClip(){
	//vytvoří nový movieClip v hloubce 0
	this.attachMovie("Kostka", "kostka_mc", 0);
	// nastaví možnost tažení
	kostka_mc.onPress=function(){
		kostka_mc.startDrag();
	}
	kostka_mc.onRelease=function(){
			kostka_mc.stopDrag();
	}
}
modreTlacitko_mc.onRelease = function() {
	kostka_mc.barva = Kostka.MODRA;
};
zeleneTlacitko_mc.onRelease = function() {
	kostka_mc.barva = Kostka.ZELENA;
};
cerveneTlacitko_mc.onRelease = function() {
	kostka_mc.barva = Kostka.CERVENA;
};
zluteTlacitko_mc.onRelease = function() {
	kostka_mc.barva = Kostka.ZLUTA;
};
 
porodniceTlacitko_mc.onPress=function(){
	vytvorNovyMovieClip();
}
hrbitovTlacitko_mc.onPress=function(){
	kostka_mc.removeMovieClip();
}

zdrojový text první varianty

Druhá varianta

Využijeme přebarvovcací kyblíčky a odhazovací koš. Má to vypadat takto: Pro přehrání obsahu potřebujete Adobe Flash Plugin.

Kód třídy je stejný, mění se skript v prvním snímku, kde funkci onRelease, která dosud pouze ukončovala tažení (prostřednictvím stopDrag()) doplníme testováním kolioze s kyblíčkama nebo s košem (s využitím hitTest(názevMovieClipu):

// funkce vytvářející na scéně nový movie clip
function vytvorNovyMovieClip() {
	//zjistím nejvyšší volnou hloubku pro nový movie clip
	var hloubka:Number = this.getNextHighestDepth();
	// vytvořím název instance nového movie clipu
	var nazevKlipu:String = "kostka"+hloubka+"_mc";
	//vytvořím nový movieClip třídy Kostka
	this.attachMovie("Kostka", nazevKlipu, hloubka);
	// nastaví u nového klipu možnost tažení
	this[nazevKlipu].onPress = function() {
		this.startDrag();
	};
	this[nazevKlipu].onRelease = function() {
		this.stopDrag();
		//test zda jsem v koši
		if (this.hitTest(kos_mc)) {
			trace("zahazuji movieClip do koše");
			this.removeMovieClip();
		}
		//testy přebarvování
		if (this.hitTest(zlutyKyblicek_mc)) {
			trace("barvím klip na žluto");
			this.barva=Kostka.ZLUTA;
		}
				if (this.hitTest(modryKyblicek_mc)) {
			trace("barvím klip na modro");
			this.barva=Kostka.MODRA;
		}
				if (this.hitTest(cervenyKyblicek_mc)) {
			trace("barvím klip na červeno");
			this.barva=Kostka.CERVENA;
		}
				if (this.hitTest(zelenyKyblicek_mc)) {
			trace("barvím klip na zeleno");
			this.barva=Kostka.ZELENA;
		}
	};
}
// Definice funkčnosti tlačítek
porodniceTlacitko_mc.onPress = function() {
	vytvorNovyMovieClip();
};

zdrojový kód příkladu

vyuka/kosticky_-_dynamicke_vytvareni_instanci_movieclipu.txt · Poslední úprava: 2007/05/13 19:33 autor: kofranek