Autor Zpráva
Eilla
Profil *
Ahojky :) Potřebovala bych poradit jednu věc. Zkoušela jsem něco udělat ve flashi a nemůžu přijít na to, jak udělat aby se mi z jednoho MC duplikoval druhý MC a ten když dosáhne nějaké podmínky tak se duplikoval znova a tak dále :) Přesněji šlo o to, že pokud dosáhne jeden MC hodnoty x 200.
Takže když to shrnu, jeden MC jede a jede a až dosáhne x 200 tak se objeví další MC který by měl když dosáhne x 200 vygenerovat další.. :)


onClipEvent(enterFrame)
{

this._x = this._x + 1;
if (this._x == 200)
{

duplicateMovieClip(this, "novyMC" + _root.a, 1);
eval("novyMC" + _root.a)._x = 10;
_root.a = _root.a + 1;

}


}



Zkoušela jsem to nějak takhle, ale nefunguje to a nemůžu přijít kde mám chybu :( Jsem naprostá začátečnice :( Děkuju za všechny odpovědi.
Hlad
Profil *
nemam ted u sebe flash
ale nezda se mi adresovani

this._x versus ("novyMC" + _root.a)._x

zkus si vse vy trace() ovat
embee
Profil
nazeru se a vyresim to :D
embee
Profil
ok tady je kod jak jsem slibil :D Cely patri na prvni frame hlavni casove osy.

/*promenne pro nastaveni rychlosti pohybu movieClipu, prahu pro zduplikovani v pixelech na ose x a promenna pro generovani jmen duplikovanych movieClipu*/

var speed:Number = 5;
var treshold:Number = 200;
var mcName:Number = 1;

/*inicianci funkce, ktera nejprve pripoji startovaci klip z knihovny. Je potreba:

1. vytvorit symbol movieClip, ktery ma byt na scene duplikovan
2. povolit pro nej export pro actionScript (advanced options pri tvorbe symbolu).

Identifier v tomto konkretnim pripade je ball, nicmene muzes zvolit libovolne jine jmeno. Pak akorat musis zmenit ball na tebou vybrane jmeno i nize ve skriptu*/

function init():Void {
this.attachMovie("ball", "ball"+mcName, this.getNextHighestDepth());
var ref:MovieClip = eval("ball"+mcName);
ref.checked = false;
moveMc(ref);
}

/*funkce pro duplikovani clipu, zde neni treba nic upravovat, muzes si samozrejme pohrat se startovni pozici nove vznikleho movie clipu*/

function createMc(ref:MovieClip):Void {
mcName++;
ref.duplicateMovieClip("ball"+mcName, this.getNextHighestDepth());
var ref = eval("ball"+mcName);
ref._x = 0;
ref.checked = false;
moveMc(ref);
}

/*funkce pro pohyb movieClipu a checkovani toho, jestli se movieClip poprve dostal za definovanou hranici na ose x. Pokud ano, zavola funkci pro duplikaci a prehodi svuj stav do "checked" - to vyjadruje skutecnost, ze tento mc uz byl zduplikovan a neni treba dalsi duplikace (jinak by se ti po prekroceni hranice ten clip duplikoval kazdy frame a to jiste nechces :)*/

function moveMc(ref:MovieClip):Void {
ref.onEnterFrame = function():Void {
ref._x += speed;
trace(ref._x > treshold && ref.checked == false);
if (ref._x > treshold && ref.checked == false) {
ref.checked = true;
createMc(ref);

}
}
}


//zavolani iniciacni funkce
init();

pozn.: celkove ke kodovani:

vzhledem k tomu ze ctu, ze jsi zacatecnice, nepouzil jsem OOP model programovani, coz by bylo uplne nejlepsi. Dam radu jak se zlepsit v kodovani: ne, opakuji NEpouzivej nikdy (=never ever) kod pripojeny primo k objektu. Svazuje to ruce a dela neporadek v projektu - u mensich pokusu to sice nevadi, ale az se dostanes k necemu vetsimu, zjistis ze napsat 500 radku kodu nic neni a pokud ho budes mit roztahany po vsech objektech, nebudes nikdy schopna kod poradne debbugovat. Navic tento typ 'programovani' se jeste poji k AS 1.0, coz je uz peknych par let mimo hru (aktualni je AS 3.0) - bohuzel se porad jeste vyskytuje v tutorialech. Snaz se naucit neco o OOP, bez toho nenaprogramujes nikdy nic poradneho ;)
XXX
Profil
embee
vycerpavajici.... ;) :-D K tomu nemam co dodat, protoze se mi to nechce cele cist ;) :-))))

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0