CS4 ActionScript 2.0 pohyblivá ciara
CS4 ActionScript 2.0 pohyblivá ciara
Ahoj,
googlil som, hladal na hojku ale stále neviem nájsť návod, ako vo Flashi urobiť pohyblivú čiaru (kábel). Pre objasnenie, jedná sa o to, že potrebujem mať, zrejme najlepšie movie clip, ktorý predstavuje súčiastku a čiarami (káble) pospájať správne s ostatnými súčiastkami. Ale ako vravím tá čiara je problém, tak či by sa nenašiel dáky jednoduchší návod (čím jednoduchšie, tým lepšie).
PS: kontrola správneho zapojenia bude možná cez hitTest alebo budem musieť použiť iný spôsob ? resp. dáky návrh riešenia by ste odporučili
Moc Diky za odpovede ...
googlil som, hladal na hojku ale stále neviem nájsť návod, ako vo Flashi urobiť pohyblivú čiaru (kábel). Pre objasnenie, jedná sa o to, že potrebujem mať, zrejme najlepšie movie clip, ktorý predstavuje súčiastku a čiarami (káble) pospájať správne s ostatnými súčiastkami. Ale ako vravím tá čiara je problém, tak či by sa nenašiel dáky jednoduchší návod (čím jednoduchšie, tým lepšie).
PS: kontrola správneho zapojenia bude možná cez hitTest alebo budem musieť použiť iný spôsob ? resp. dáky návrh riešenia by ste odporučili
Moc Diky za odpovede ...
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: CS4 ActionScript 2.0 pohyblivá ciara
neviem akým štýlom sa má pohybovať, ale zrejme myslíš motion tween. Na prvý frame si nakresli čiaru v prvej pozícii, na ďalší frame dáš pravý klik a vložiť kľúčový frame. Potom tam nakreslíš (resp presunieš tú čiaru) na inú pozíciu. Označíš framy medzi prvým a týmto novým, pravý klik a create motion tween. Ak si myslel niečo iné, skús to viac objasniť
Re: CS4 ActionScript 2.0 pohyblivá ciara
Myslel som to tak aby sa dala čiara zachytiť myšou a potiahnuť, pričom by sa táto čiara ľubovoľne zväčšovala/zmenšovala a bolo ňou možné manipulovať aj v uhloch. Mám jeden príklad, ale tomu som moc nepochopil, lebo samozrejme je už celý hotový a chcem sa to v prvom rade naučiť a nie len skopírovať a návod na nete som nenašiel.
-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: CS4 ActionScript 2.0 pohyblivá ciara
Momentálne nie som doma a ani dlhšiu dobu nebudem, tak nemám k dispozícii kompilátor, ale len tak z hlavy tu máš skript, ktorý ešte má muchy ale smeruje k tomu čo potrebuješ (dúfam), a vieš sa toho chytiť a dorobiť to.
Skús sem hodiť tú tvoju ukážku, ktorej nerozumieš, lebo ak je funkčná tak nie je čo riešiť a vysvetliť ti čo a ako je to najmenej.
Kód: Vybrať všetko
this.createEmptyMovieClip("kon", this.getNextHighestDepth());
kon.createEmptyMovieClip("ciara", kon.getNextHighestDepth());
kon.ciara.beginFill(0x000000);
kon.ciara.moveTo(0, 0);
kon.ciara.lineTo(0, 2);
kon.ciara.lineTo(300, 2);
kon.ciara.lineTo(300, 0);
kon.ciara.lineTo(0, 0);
kon.ciara.endFill();
kon._x = 150;
kon._y = 150;
kon.createEmptyMovieClip("u1", kon.getNextHighestDepth());
kon.u1.beginFill(0xFF0000);
kon.u1.moveTo(0, 0);
kon.u1.lineTo(0, 6);
kon.u1.lineTo(6, 6);
kon.u1.lineTo(6, 0);
kon.u1.lineTo(0, 0);
kon.u1.endFill();
duplicateMovieClip(kon.u1, "u2", kon.getNextHighestDepth());
kon.u2._x = kon.ciara._width;
//
kon.u1.onPress = function() {
kon.startDrag();
};
kon.u1.onRelease = function() {
kon.stopDrag();
};
kon.u2.onPress = function() {
this.startDrag();
u2_d = true;
};
kon.u2.onRelease = kon.u2.onReleaseOutside=function () {
this.stopDrag();
u2_d = false;
};
function onMouseMove() {
if (u2_d) {
a = _xmouse-kon._x;
b = _ymouse-kon._y;
c = Math.sqrt(a*a+b*b);
uhol = Math.asin(b/c);
uhol = uhol*180/Math.PI;
if ((_xmouse<kon._x) && (uhol<90) && (uhol>-90)) {
uhol = 180-uhol;
}
kon.ciara._rotation = uhol;
kon.u1._rotation = uhol;
kon.u2._rotation = uhol;
if (uhol<0 || uhol>0) {
kon.ciara._width = Math.pow((Math.pow(_xmouse-kon._x, 2)+Math.pow(_ymouse-kon._y, 2)), 1/2);
}else{
kon.ciara._width = _xmouse -kon._x
}
}
}
Re: CS4 ActionScript 2.0 pohyblivá ciara
Jedná sa o tri movieClipy, dva z nich predstavujú ťažné body (pos1, pos2) a tretí čiaru (/pos1_/pos2). Script je na scéne len jeden a to stop(); Ďaľší skript je až vnútri MovieClipu, ktorý predstavuje čiaru.
Ďalej nasleduje Skript, ktorý je v niekoľkých framoch vnútri movieCliput (/pos1_/pos2)
Ďalej nasleduje Skript, ktorý je v niekoľkých framoch vnútri movieCliput (/pos1_/pos2)
Kód: Vybrať všetko
pos1 = "";
pos2 = "";
set("var", 1);
totCount = 1;
while (Number(totCount)<=Number(length(_name))) {
if (Number(eval("var")) == 1) {
if (substring(_name, totCount, 1) ne "_") {
pos1 = pos1 add substring (_name,totCount,1);
} else {
set("var", 2);
}
} else if (Number(eval("var")) == 2) {
if (substring(_name, totCount, 1) ne "_") {
pos2 = pos2 add substring (_name,totCount,1);
} else {
set("var", 2);
}
}
totCount = Number(totCount)+1;
}Kód: Vybrať všetko
call("ddd");Kód: Vybrať všetko
gotoAndPlay(3);Kód: Vybrať všetko
setProperty("", _x, getProperty(pos1, _x));
setProperty("", _y, getProperty(pos1, _y));
call("calcSUBT");
if (Number(getProperty(pos1, _x))>=Number(getProperty(pos2, _x))) {
Xmult = 1;
if (Number(getProperty(pos1, _y))>=Number(getProperty(pos2, _y))) {
Ymult = 1;
setProperty("line", _rotation, 90);
} else {
Ymult = -1;
setProperty("line", _rotation, 0);
}
} else {
Xmult = -1;
if (Number(getProperty(pos1, _y))>=Number(getProperty(pos2, _y))) {
Ymult = 1;
setProperty("line", _rotation, 180);
} else {
Ymult = -1;
setProperty("line", _rotation, 270);
}
}
setProperty("", _xscale, (Xmult*substractorX)/20);
setProperty("", _yscale, (Ymult*substractorY)/20);
/:w = substractorX;
/:h = substractorY;
/:fr = getProperty("line", _rotation);Kód: Vybrať všetko
substractorX = (getProperty(pos1, _x)-getProperty(pos2, _x));
if (Number(substractorX) == 0) {
substractorX = 1;
}
substractorY = (getProperty(pos1, _y)-getProperty(pos2, _y));
if (Number(substractorY) == 0) {
substractorY = 1;
}-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: CS4 ActionScript 2.0 pohyblivá ciara
Kód: Vybrať všetko
pos1 = "";
pos2 = "";
set("var", 1);
totCount = 1;
while (Number(totCount)<=Number(length(_name))) {
if (Number(eval("var")) == 1) {
if (substring(_name, totCount, 1) != "_") {
pos1 = pos1+substring(_name, totCount, 1);
} else {
set("var", 2);
}
} else if (Number(eval("var")) == 2) {
if (substring(_name, totCount, 1) != "_") {
pos2 = pos2+substring(_name, totCount, 1);
} else {
set("var", 2);
}
}
totCount = Number(totCount)+1;
}
Ďalej, ako je to teda urobené s tými movieclipmi? Sú použité 3:
Line = to je čiara;
pos1 = prvý (ľavý) úchytný bod;
pos2 = druhý (pravý) úchytný bod.
A podľa toho čo si napísal som pochopil, že tento skript je vo vnútri každého z tých dvoch uchytných bodov (pos1 a pos2) na zvlášť frameoch. Ak ano aj to je blbosť. V skripte je jasne napísané, že Number(getProperty(pos2, _x));. Ako môže byt zisťovaná pozícia _x dákeho movieclipu z neho samého, ak je použitý iba názov objektu bez úplnej cesty _root.pos2, alebo bez this? Lebo v opačnom prípade by to znamenalo, že sa zisťuje poloha dákeho ďalšieho objektu v tomto movieclipe pos2, ktorý je tiež nazvaný pos2. Poprosím o vysvetlenie lebo som z toho jeleň a zatiaľ ja sám tomu skriptu nerozumiem, čo ma dosť desí. Ak sa ti dá daj do prílohy Fla súbor alebo SWFko nech vidim, že to naozaj funguje, lebo zatiaľ sa mi tomu nechce verit.
Re: CS4 ActionScript 2.0 pohyblivá ciara
No upol som ti to aby si si to mohol dobre pozrieť a tento príklad som získal tak, že som sa jedného človeka pýtal ako urobiť vo Flash tú pohyblivú čiaru a on mi poslal toto ako príklad, čo našiel.
PS: v tých movieClipoch pos1 a pos2 nie je žiadny script, všetko je v ciare. Upol som to na tú stránku, lebo mi vypísalo, keď som chcel pridať prílohu, že prípona fla nie je povolená.
PS: v tých movieClipoch pos1 a pos2 nie je žiadny script, všetko je v ciare. Upol som to na tú stránku, lebo mi vypísalo, keď som chcel pridať prílohu, že prípona fla nie je povolená.
Kód: Vybrať všetko
http://uloz.to/5551189/ciara.fla-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: CS4 ActionScript 2.0 pohyblivá ciara
(FLA súbory dávame do RAR a potom do prílohy)
No tak som sa trochu viac prepočítal. Nevedel som, že fla súbory CS3 a vyššie sú chránené proti konvertovaniu.
Upni mi prosím SWF, lebo s tým fla nič neurobím. To SWF si aspoň dekompilujem. (swf sa dajú dať aj do prílohy)
No tak som sa trochu viac prepočítal. Nevedel som, že fla súbory CS3 a vyššie sú chránené proti konvertovaniu.
Re: CS4 ActionScript 2.0 pohyblivá ciara
Tu to je ... ja by som vlastne nepotreboval ani dva aktívne konce ale proste súčiastku, dajme tomu základný štvorec, z ktorého by na jednej strane trčal kábel, s ktorým by sa dal spojiť s inou súčiastkou. Každá súčiastka by mala na jednej strane 2x nepohyblivé pripojenie a na druhej strane 1x pohyblivú čiaru. Dúfam, že sa z toho môjho výkladu vysomáriš.
- Prílohy
-
- ciara.swf
- (2.67 KiB) 149 stiahnutí
-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: CS4 ActionScript 2.0 pohyblivá ciara
Takže sa chcem v prvom rade ospravedlniť, že mi to chvíľku trvalo, ale ako som už spomínal nie som doma (som na dovolenke), tak som sa tomu veľmi nevenoval.
Mal som pravdu bol to ActionScript 1. Tak som to celé prerobil do Action Script 2 a celú aplikáciu som optimalizoval - co vidno aj na vyslednej velkosti SWF - a script je len na jednom mieste v snímku (všetko je urobené cez jeden frame a nič sa nehýbe).
Tu je script aj s komentármi.
Zdrojový *.fla a *.as súbor je v prílohe. Súbor *.fla je zdroják, ktorý otvor vo flashi a obsahuje iba grafiku a cez #include je do neho načítavaný script, ktorý je v súbore *.as, takže obidva súbory musia byt v jednom priečinku (pri exportovaní SWF animácie ostane script v SWFku, takže SWF nenačítava súbor *.as).
Maj sa.
Mal som pravdu bol to ActionScript 1. Tak som to celé prerobil do Action Script 2 a celú aplikáciu som optimalizoval - co vidno aj na vyslednej velkosti SWF - a script je len na jednom mieste v snímku (všetko je urobené cez jeden frame a nič sa nehýbe).
Tu je script aj s komentármi.
Kód: Vybrať všetko
/*cyklus pre hromadné priradenie funkcie viacerým objektom
i=1; i je menšie alebo sa rovná 2, ak druhá podmienka
nie je pravdivá pripočítaj k i +1.
*/
for (i=1; i<=2; i++) {
/*objekt uchyt1 a 2 onPress event
vytvorenie funkcie*/
_root["uchyt"+i].onPress = function() {
//funkcia uchopenie objektu kurzorom myši (this = tento objekt)
startDrag(this);
};
/*objekt uchyt1 a 2 onRelease a onReleaseOutside event
vytvorenie funkcie*/
_root["uchyt"+i].onRelease = _root["uchyt"+i].onReleaseOutside=function () {
//funkcia koniec uchopenia
stopDrag();
};
}
//koniec cyklu
//
/*onEnterFrame funkcia ("cyklus" bez podmienky), rýchlosť
frekvencie opakovania je závislá na počte nastavených FPS
v SWF a od výkonu užívateľovho PC))*/
//vytvorenie funkcie
onEnterFrame = function () {
/*poloha x aktuálneho objektu ciara,
sa rovná polohe x objektu uchyt1*/
this._x = _root.uchyt1._x;
/*poloha y aktuálneho objektu ciara,
sa rovná polohe y objektu uchyt1*/
this._y = _root.uchyt1._y;
//
/*podmienka
ak je pozícia x objektu uchyt1 väčšia
alebo sa rovná pozícii x objektu uchyt2*/
if (uchyt1._x>=uchyt2._x) {
//vytvor premennú Xmult a naplň ju hodnotou 1
Xmult = 1;
/*podmienka:
ak je pozícia y objektu uchyt1 väčšia
alebo sa rovná pozícií y objektu uchyt2*/
if (uchyt1._y>=uchyt2._y) {
//vytvor premennú Ymult a naplň ju hodnotou 1
Ymult = 1;
/*objekt ciara otoč v smere hodinových ručičiek
o 90 stupňov od aktuálnej pozície*/
ciara._rotation = 90;
//ak nie je splnená podmienka tak vykonaj
} else {
//vytvor premennú Ymult a naplň ju hodnotou -1
Ymult = -1;
/*objekt ciara otoč v smere hodinových ručičiek
o 0 stupňov od aktuálnej pozície*/
ciara._rotation = 0;
}
//ak nie je splnená podmienka tak vykonaj
} else {
//vytvor premennú Xmult a naplň ju hodnotou -1
Xmult = -1;
/*podmienka:
ak je pozícia y objektu uchyt1 väčšia
alebo sa rovná pozícii y objektu uchyt2*/
if (uchyt1._y>=uchyt2._y) {
//vytvor premennú Ymult a naplň ju hodnotou 1
Ymult = 1;
/*objekt ciara otoč v smere hodinových ručičiek
o 180 stupňov od aktuálnej pozície*/
ciara._rotation = 180;
//ak nie je splnená podmienka tak vykonaj
} else {
//vytvor premennú Ymult a naplň ju hodnotou -1
Ymult = -1;
/*objekt ciara otoč v smere hodinových ručičiek
o 270 stupňov od aktuálnej pozície*/
ciara._rotation = 270;
}
}
//koniec podmienky
//
/*vytvor premennú subX a naplň ju výsledkom odčítania
polohy x objektu uchyt1, polohou x objektu uchyt2*/
subX = _root.uchyt1._x-_root.uchyt2._x;
//podmienka: ak sa subX = 0
if (subX == 0) {
//vytvor premennú subX a naplň ju hodnotou 1
subX = 1;
}
//koniec podmienky
//
/*vytvor premennú subY a naplň ju výsledkom odčítania
polohy y objektu uchyt1, polohou y objektu uchyt2*/
subY = _root.uchyt1._y-_root.uchyt2._y;
//podmienka: ak sa subY = 0
if (subY == 0) {
//vytvor premennú subY a naplň ju hodnotou 1
subY = 1;
}
//koniec podmienky
//
/*deformácia aktuálneho objektu ciara v osi x ,
je priamo úmerná súčinu premennej Xmult a subX
a nepriamo úmerná hodnote 20*/
this._xscale = Xmult*subX/20;
/*deformácia aktuálneho objektu ciara v osi y ,
je priamo úmerná súčinu premennej Ymult a subY
a nepriamo úmerná hodnote 20*/
this._yscale = Ymult*subY/20;
};
//koniec
Maj sa.
Re: CS4 ActionScript 2.0 pohyblivá ciara
Strešne moc ďakujem za pomoc ... 