ActionScript 2 - zmenaMovieClipu

Programovacie jazyky, rady, poradňa...
COTHW
Medium Star
Medium Star
Príspevky: 497
Registrovaný: 08 aug 2009, 15:37

ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa COTHW »

Zdravím všetkých,
narazil som na problém. Pomocou funkcie createEmptyMovieClip som si vytvoril spojnice bedzi viacerými bodmi (každá takáto spojnice [movieClip] má svoje meno a rozdielnu hlbku). Lenže teraz prichádza problém. Chcem stýmito bodmi pohybovať ľubovoľne podľa svojho uváženia, ale tým spôsobom, že medzi bodmi existuje viacero spojníc. Narazil som na niekoľko príkladov kde je niečo podobné riešené, ale je to vždy urobené cez opakované vykresľovanie v jednej hlbke, zatiaľ, čo ja potrebujem pracovať vo viacerých hĺbkach z dôvodu, že neskôr chcem tieto spojnice aj odstraňovať.

Ak sa niekto stretol s podobným problémom, alebo by ma vedel správne nasmerovať budem veľmi rád. Ďakujem
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa weroro »

Stále pracuješ na tej app kreslenia elektrických obvodov? Si dávaš na čas :D

Neviem ako sa toto rieši, ale určite by som skúsil niečo takéto:

Pre každý pár úchytných bodov a spojovacej čiary by som vytvoril samostatný kontajner (prázdny movie clip), do ktorého by som vykreslil tieto objekty. Potom môžeš bez problému zacieliť na potrebnú inštanciu (presúvanie, odstraňovanie, modifikácia)
COTHW
Medium Star
Medium Star
Príspevky: 497
Registrovaný: 08 aug 2009, 15:37

Re: ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa COTHW »

Ono podmienky sa bohužiaľ stále menia, vzhľadom na moje schopnosti a na predstavy ako to má vyzerať. Je niečo už hotové (2 veci sú viac menej hotové tam už len pár úprav treba), ale zas mi pribudol nový projekt a s niečím takýmto som sa ešte nestretol. Prázdny kontajner ? Mohol by si mi sem hodiť kúsok scriptu, ak by si si našiel čas ? Dačo čoho by sa dalo chytiť, pochopiť problematiku. S kontajnermi som ešte akosi ešte nepracoval. Momentálne to mám všetko hodené do jednej funkcie na vykreslovanie.

Kód: Vybrať všetko

function vykresli(){
	if(prepare.length==4){       //hodnoty si ukladám do pola aby som vedel, že bolo kliknuté na dva movieClipy za 
		spoj=meno[0]+"-"+meno[1];     //tu si len ukladám názvy, som dúfal že to pojde pouzit neskor pri mazani
		zmenFarbu();         //ono toto je len dalsia v tomto pripade nepodstatna funkcia
		obj[spoj]=createEmptyMovieClip("ciara"+i, i);   //samotne vytváranie movieClipu (spojenia)
		with(obj[spoj]){     //ono pouzil som with pre lahsiu manipuláciu
			lineStyle(2,farba);      //farbu tiez ziskam od uzivatela takze toto je len premena do ktorej sa to uklada
			moveTo(prepare[0],prepare[1]);
			lineTo(prepare[2],prepare[3]);
		}
		vymaz();  //tu mazem pole prepare do ktoreho si ukladám suradnice
		mcvisible(); //nastavenie viditelnosti, tiež vec súvisiaca s niečím iným
	}
}
Našiel som príklad s takýmto scriptom ale akosi sa z toho neviem vymotať. Dám to do prílohy. Nerobí to presne to, čo potrebujem, ale je to tam riešné iným spôsobom ako novým vykresľovaním a zároveň je tam aj ukladanie vo viacerých vrstvách, ale ak si myslíš, že to je zlé riešenie vzhľadom na to, čo potrebujem rád sa nechám poučiť. :)
Prílohy
dragline.rar
(4.84 KiB) 16 stiahnutí
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa weroro »

No LOL veď to je celkom prča :)

A ty potrebuješ čo? potrebuješ mať možnosť jedným bodom ovládať dve vlákna ale zároveň chceš mať možnosť tento bod v prípade potreby odstrániť? to znamená: nakreslím čiaru A ktorá spája úchytné body A1 - A2. Tak ako je to v tomto príspevku http://www.hojko.com/post1471314.html#p1471314 potom chceš mať možnosť nakresliť ďalšiu čiaru B s bodmi B1 - B2 a tak isto chceš aby keď spojíš body A1 a B2 aby sa chovali ako jeden bod a z toho vyplýva, že ak budeš hýbať bodom A1B2 budeš automaticky ovplyvňovať aj obe čiary A-B. Ďalej v prípade potreby chceš mať možnosť, odstrániť napr. čiaru A, s ktorou odstrániš aj body A1 - A2. to urobíš, tak ako som písal v prvom príspevku, že všetky tieto 3 objekty (dva úchytné body a čiaru) si zakaždým umiestniš do samostatného movieclipu (kontajneru) a v prípade potreby odstránenia použiješ funkciu unloadMovie s názvom tohto kontajneru a automaticky sa odstránia aj jeho potomkovia (movieclipy umiestnene v ňom). Funkciou hittest, ktorá nie je obmedzovaná vrstvou, viditeľnosťou a umiestnením objektu môžeš testovať spojenie bodov.


Momentálne sa mi nechce nič programovať takže ukážku ti nedám. To ale neznamená, že v prípade potreby ti sem niečo nehodím :)
COTHW
Medium Star
Medium Star
Príspevky: 497
Registrovaný: 08 aug 2009, 15:37

Re: ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa COTHW »

Weroro výborne si vystihol, čo potrebuje, až nato, že ja budem mazať len movieClipy, ktoré sú vlákna. Zo začiatku budem mať všetky komponenty, ktoré chcem spojiť na ploche a spájať ich. Neskôr to ak vydá čas modifikujem a budem dohadzovať jednotlivé komponenty na plochu pomcou ComboBoxu.

Ja som to robil tak, že som si neumiestňoval vytvorené spojenia do movieClipu ale do Objektu. Tak to skúsim prepracovať. Len mazanie týmto spôsobom sa možno ukáže nevhodné. PS: Umiestnením do nového movieClipu nie je troška zbytočné, keď vlastne ja chcem mazať vlákna a jednotlivé body oddelene ?
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa weroro »

Tu som ti teraz z dlhej chvíle napísal AS, kde si pozri ako som to myslel s tými kontajnermi :)

Kód: Vybrať všetko

_root.createEmptyMovieClip("tlacitkoSpat", this.getNextHighestDepth());
with (tlacitkoSpat) {
    beginFill(0xcccccc);
    moveTo(0, 0);
    lineTo(60, 0);
    lineTo(60, 30);
    lineTo(0, 30);
    lineTo(0, 0);
    endFill();
    _x = 500;
    _y = 10;
    this.createTextField("nazov", 10, 500, 15, 100, 20);
    this.nazov.selectable = false;
    this.nazov.text = "ZMAZAŤ";
}
var PocetKontajnerov:Number = 1;
var prvaXpoz:Number = 0;
var prvaYpoz:Number = 0;
var druhaXpoz:Number = 0;
var druhaYpoz:Number = 0;
function novyKontajner():Void {
    _root.createEmptyMovieClip("vykreslenie"+_root.PocetKontajnerov, this.getNextHighestDepth());
}
_root.createEmptyMovieClip("ukazka", this.getNextHighestDepth());
var myska:Object = new Object();
myska.onMouseDown = function():Void  {
    if (!_root.tlacitkoSpat.hitTest(_xmouse, _ymouse, true)) {
        _root.kreslenie = !_root.kreslenie;
        _root.mysHore = false;
        if (!_root.kreslenie) {
            if (_root.druhaXpoz != _root.druhaYpoz) {
                _root.novyKontajner();
                _root["vykreslenie"+_root.PocetKontajnerov].lineStyle(2, 0xFF0000, 100);
                _root["vykreslenie"+_root.PocetKontajnerov].moveTo(_root.prvaXpoz, _root.prvaYpoz);
                _root["vykreslenie"+_root.PocetKontajnerov].lineTo(_root.druhaXpoz, _root.druhaYpoz);
                _root.PocetKontajnerov++;
            }
        }
    }
};
myska.onMouseMove = function():Void  {
    if (!_root.tlacitkoSpat.hitTest(_xmouse, _ymouse, true)) {
        if (_root.kreslenie && _root.mysHore) {
            _root.ukazka.clear();
            _root.ukazka.lineStyle(2, 0x0000FF, 100);
            _root.ukazka.moveTo(_root.prvaXpoz, _root.prvaYpoz);
            _root.ukazka.lineTo(_xmouse, _ymouse);
            _root.druhaXpoz = _xmouse;
            _root.druhaYpoz = _ymouse;
        }
        updateAfterEvent();
    }
};
myska.onMouseUp = function():Void  {
    if (!_root.tlacitkoSpat.hitTest(_xmouse, _ymouse, true)) {
        _root.mysHore = true;
        _root.prvaXpoz = _xmouse;
        _root.prvaYpoz = _ymouse;
    }
};
Mouse.addListener(myska);
_root.tlacitkoSpat.onRelease = function():Void  {
    _root.ukazka.clear();
    if (_root.PocetKontajnerov>0) {
        _root.PocetKontajnerov--;
        unloadMovie(_root["vykreslenie"+_root.PocetKontajnerov]);
    }
};
 
Prílohy
ukazka.swf
(817 Bajtov) 124 stiahnutí
COTHW
Medium Star
Medium Star
Príspevky: 497
Registrovaný: 08 aug 2009, 15:37

Re: ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa COTHW »

No my sme sa nepochopili moc, ale určite tam najdem niečo, čo sa bude dať použiť. Práve som ešte len začal. Ešte tam je veľa vecí, čo chcem doladiť. Zatiaľ tam je len spájanie s výberom. Musím tam dorobiť mazanie + pohyb s tými jednotlivými komponentami. Dnes mam čas tak sa idem do toho pustiť. Tiež tam tých čiar musí byť viac, ja by som potreboval mazanie, kde sa dajú odstrániť ľubovoľné spojenia(vlakna). Spätne som si vymyslel taký primitívny script predtým aj ja. Síce na ten tvoj nemá ale fungoval.
Prílohy
VonNeumanSchema.swf
(58.95 KiB) 112 stiahnutí
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa weroro »

Počkať. Možno mi práve doplo. Ty si na scénu naukladáš súčiastky a potom ich len pospájaš čiaramy? V prípade potreby (chybného spojenia) chceš konkrétnu čiaru zmazať? Tak isto aj odstrániť súčiasku (v prípade potreby)? Ak áno, tak to je celkom easy. Keď prídem domov skôr (ale ako pozerám na ten papier s popisom aplikácie ktorú mám urobiť tak to bude asi na dlho :? ), tak to urobím.

Ešte by si mi mohol ozrejmiť tie farby čiar ?
COTHW
Medium Star
Medium Star
Príspevky: 497
Registrovaný: 08 aug 2009, 15:37

Re: ActionScript 2 - zmenaMovieClipu

Príspevok od používateľa COTHW »

weroro napísal:Počkať. Možno mi práve doplo. Ty si na scénu naukladáš súčiastky a potom ich len pospájaš čiaramy? V prípade potreby (chybného spojenia) chceš konkrétnu čiaru zmazať? Tak isto aj odstrániť súčiasku (v prípade potreby)? Ak áno, tak to je celkom easy. Keď prídem domov skôr (ale ako pozerám na ten papier s popisom aplikácie ktorú mám urobiť tak to bude asi na dlho :? ), tak to urobím.

Ešte by si mi mohol ozrejmiť tie farby čiar ?
Ono nemusíš sa ponáhľať ja na tom stále makám ... :D. Kontrola na základe farby čiary dám alebo nedám bod. Radšej by som už v komunikácií pokračoval cez SS. Ak by ti to teda nevadilo. :) ps:mazanie som viac menej vyriešil, ono len neviem ako nastaviť to posúvanie MovieClipov (čiar) pre dajme tomu 5 komponentov a každý z týchto 5tich komponentov bude mať 10 bodov, ktorými sa budú dať spájať (na tom swf je len jeden bod pre jeden komponent zatiaľ).
Napísať odpoveď