Autor Zpráva
Jirsák
Profil *
Zdravím,

chtěl bych poprosit o radu. Mám dynamické textové pole, Single line. Toto pole bude obsahovat různě dlouhé texty. takže by mělo mít i různé rozměry šířky.

Problém je následující:
potřebuji znát rozměry textového pole, ať už tam napíši "bla" nebo "bla bla baf ahoj" - evidentně bude každé různě široké. Tyto rozměry potřebuji znát, protože pak budu tímto textovým polem pohybovat podle aktuálního času animace. potřebuji, aby se během nějakého času (proměnného), postupně zobrazil celý text - v podstatě jde o běžící titulky.

Chtěl jsem zjistit šířku dynamického pole následovně:
_root.my_ta.text = _root.titulek_mc.titulek_txt._width;

Do textového pole "my_ta" jsem si nechal vypsat hodnotu šířky dynamického textového pole "titulek_txt". Zobrazilo mi to ovšem šířku ne v závislosti na délce textu, ale pořád tu samou, která je nastavena ve vlastnostech dynamického textového pole.

Tak jsem hledal náhradní řešení. Chtěl jsem použít textove_pole.length, ale zjistil jsem, že je pro AS 1. Takže to také nepůjde.

Dodatek: jedná se mi o ActionScript 2

Děkuji za pomoc,
Jakub Jirsák
Jirsák
Profil *
Ještě jeden dodatek.

textove_pole.length jsem chtěl použít tak, že bych takto zjistil počet znaků a vynásobil průměrnou šířkou písmena. Sice hloupé řešení, ale aspoň nějaké. Ale stejně to nešlo, protože jsem v AS2.
dredie
Profil
Jirsák
Zobrazilo mi to ovšem šířku ne v závislosti na délce textu, ale pořád tu samou, která je nastavena ve vlastnostech dynamického textového pole.

no ja si teda nejsem jistej, ale myslim, ze rozmery textoveho pole se jenom vlozenim textu nezmeni , ale zustavaji porad stejne tak, jak pises... to se da ostatne zkusit tak, ze do dyn. pole zkusis vlozit delsi text, nez ktery se defaultne do nej vleze, pokud se ti text nezobrazi cely, je to jasne. Tim padem bych rek, ze je musis menit zase pomoci skriptu.

d.
XXX
Profil
Jirsák
Musis mit pro to textove pole nastavenou vlastnost autosize = true, jinak ti bude to pole zustavat porad stejne velke a nebude se menit jeho sirka ;)
Jirsák
Profil *
Nojo, to je pravda. Stačí tam ale dopsat:
text_txt.autoSize = true;

a už se mi mění šířka pole podle délky textu.

Takže teď skript vypadá takto:
text_txt.autoSize = true;
text_var = "Nějaký ten text"
vysledky = text_txt._width;

a už to funguje. Teď tedy nevím, proč mi to v tomto pokusném souboru funguje, ale v projektu do kterého to potřebuji už ne. To si snad nějak vyřeším.

Děkuji za trknutí. :-)
XXX
Profil
Jirsák
Stačí tam ale dopsat:
Co tam znamena to "ale"? To je jako kdybys prisel na neco jineho, nez jsem ti radil :))
Jirsák
Profil *
Tak na pokusném souboru to funguje jak má. Ale v "ostrém" ne. Mohl by být problém, že zde je text převeden do Embed text (a je proto schován v MovieClipu)?
XXX
Profil
Jirsák
Tezko radit, kdyz vubec nevime, co mas za problem. Jestli se ti nenacita text, nemeni se ti velikost textoveho pole nebo co vlastne ti nefunguje a jak to mas resene. odkud nacitas ty texty atd... je toho hodne,kde muze byt chyba. takhle fakt poradit nejde
Jirsák
Profil *
Dobrá, pokusím se o popis.

Na ploše mám 2 Dynamická textová pole. Jedno má nastavené Var: text_var (název nastaven "text_txt") a druhé Var: vysledky.

Přidám skript do vrstvy AS (který myslím si vše vysvětluje):
text_txt.autoSize = true;
text_var = "bsdf sdf sdf f df dfg df"
vysledky = text_txt._width;

Takhle je to OK, hezky to funguje jak má - do pole s Var: vysledky se vypisuje hodnota délky dynamického pole, podle toho, co je v něm napsáno.

Problém nastává, pokud "text_txt" dám Convert To Symbol (F8). Ten pojmenuji mc a Instance name také mc. Pak změním "text_txt" na Embed. Potom již délku nevypisuje správně, i když změním AS na:
_root.mc.text_txt.autoSize = true;
_root.mc.text_var = "bsdf sdf sdf f df dfg df"
_root.vysledky = _root.mc.text_txt._width;
XXX
Profil
Jirsak

_root.mc.text_txt.autoSize = true;
_root.mc.text_txt.text = "bsdf sdf sdf f df dfg df"
_root.vysledky = _root.mc.text_txt._width;
Jirsák
Profil *
Děkuji. Jsem to ale trouba. Psal jsem to ve špatném pořadí, nejprve jsem nechal vypisovat šířku a až pak vkládal text. To se nedivím, že to nefungovalo.

Ještě doplním, pokud by někdo někdy něco podobného řešil. Počet znaků jsem také mohl použít:
text_txt.length;

Nefungovalo mi to opět protože jsem to měl napsané ve špatném pořadí.
XXX
Profil
Jirsák
Počet znaku si samozrejme vypises pomoci vlastnosti textovych poli _length, ale ze by to bylo jedno z moznych reseni je nesmysl, leda ze bys pracoval s neproporciálním písmem. Tvoje výsledná hodnota by byla jen priblizna, coz je nesmyslne vzhledem k tomu, ze jde jednoduse dosahnout presneho vysledku ;)
Jirsák
Profil *
Tak tento problém pokračuje. Dokud je text v "_root.mc.text_txt" rozumně krátký, tak je vše OK. Ale problém nastane, pokud je text dlouhý (zatím nedokážu říct jak dlouhý, ale cca 1/2 textu A4). Pak se začne šířka takového textového pole počítat špatně.

Mohlo by to být tím, že je nějak omezená maximální šířka plochy, kterou může mít plocha (Stage) a pokud textové pole tuto šířku překročí, pak se začne počítat odznovu? Uvedu příklad:
- ve Flashi je omezení (třeba), že nemůže být Stage (a tedy i jakýkoliv MovieClip a Textové pole a cokoliv dalšího) delší než 10 000pxl.
- Textové pole, které použiji, má délku 10 200 (protože je tam tak dlouhý text)
- pak se mi vypíše šířka textového pole 200; tedy 10 200 - 10 000. Protože těch 10 000 jakoby překročím a Flash si započítá jen ten zbytek

Nebo je zakopaný pes někde jinde?
Jirsák
Profil *
Pokusím se položit otázku jinak. Je ve Flashi nějaké omezení, jak velký může být Stage a v závislosti na tom, jak velký objekt maximálně může ve Flashi být?

Zjistil jsem, že když chci do Flashe dát nějaký jednořádkový hodně dlouhý text, nejde to. Začne ho zalamovat. Pokud se mi podaří ho nějak prodloužit (a zalomení tak zrušit), zjistím, že text není na celé ploše celý (že část někde v okrajích mizí).

Je nějaký způsob, jak toto omezení obejít (pokud takové omezení opravdu existuje)?

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