pomiń operacje obrysowywania a funkcja trace()

Nie działa. Nie działa! trace(“dupa”). Debug chodzi, kod jest OK, ale trace() nie działa. Czemu? Ano temu, że w ustawieniach publikowania zaznaczyłem lekkomyślnie checkbox “pomiń operacje obrysowywania”. Co to są operacje obrysowywania? Nie wiem, ale nie potrzebowałem ich, więc głupi wyłączyłem. Szkoda tylko, że pod tym zagadkowym napisem kryje się angielskie “omit trace actions” (cytuję z głowy). Ktoś sprawdzał te tłumaczenia? :)) W każdym razie – aby trace() działało, opcja musi być wyłączona. Nie chcę myśleć, dlaczego przetłumaczone na polski wersje programów Adobe są aż tyle droższe od amerykańskich.

osadzanie czcionek we Flashu i formatowanie tekstów (bold/italic)

A oto błąd we Flash CS3: kiedy wstawimy sobie dynamiczne pole tekstowe i zaszyjemy czcionki, postępując całkiem przepisowo, możemy doznać przykrego zaskoczenia. Jeśli np. lubimy napisy rozstrzelone i pogrubione jednocześnie, pewnie ustawiliśmy odstępy między literami na więcej niż 0, no i mamy zaznaczone wytłuszczenie. Może nawet pamiętaliśmy o stworzeniu czcionki w bibliotece i wybraliśmy ją dla naszego TextFielda. Cóż, kiedy rezultat będzie nieco inny niż zamierzony… Flash zgubi pogrubienie! Czcionka niby jest zaszyta, tekst jest widoczny po maskowaniu i obróceniu, ale nie jest wytłuszczony. Będzie tak, jeśli tworzymy obiekt zawierający to pole tekstowe dynamicznie (np. var a:Naszobiekt = new NaszObiekt();) Jaka rada? Ano, odpuścić kerning na 0 w edytorze CS3, a ustawić go w ActionScriptcie:

var tf:TextFormat;
tf = label_tf.defaultTextFormat;
tf.letterSpacing = 1.5;
label_tf.defaultTextFormat = tf;

Opcje istotne przy osadzaniu czcionki dla dynamicznego pola tekstowego we Flash CS3

flash, flex builder i konflikt nazw

Kiedy ktoś chciałby, jak ja, zmajstrować klip we Flashu, ale oprogramować go we Fleksie, może napotkać kłopot. Nazwy nadane obiektom we Flashu nijak nie są automatycznie rozpoznawane we Flex Builderze, bo i nie mogą. Dlatego przy próbie użycia takiego obiektu dostaniemy od razu komunikat “1120: Access of undefined property moj_biedny_mc [...]“. Niestety pierwsza reakcja ? zadeklarować zmienną ? również nie pomoże. Tu z kolei zostaniemy poczęstowani tekstem o konflikcie nazw przy kompilacji “1151: A conflict exists with definition moj_biedny_mc in namespace internal.“, bo Flash napotka deklarację zmiennej z kodu i drugą, automatycznie wygenerowaną z obiektu.

Najprostszym znanym mi sposobem, całkiem znośnym, jest przepisanie obiektów stworzonych ręcznie do zmiennych za pomocą getChildByName(); Musimy tylko znać nazwy nadane we Flashu, np.:

// zakładam, że w pliku .fla stworzyłem na scenie klip o nazwie "moj_reczny_mc".
public var moj_programowy_mc:MovieClip = getChildByName('moj_reczny_mc') as MovieClip;
// jeśli stworzyłem sobie pole tekstowe "moje_reczne_pole", to działam analogicznie:
public var moj_programowe_pole:TextField = getChildByName('moje_reczne_pole') as TextField;

Końcówki “as MovieClip” i “as TextField” są konieczne,bo metoda getChildByName() zwraca obiek typu DisplayObject i trzeba go rzutować na właściwy typ.

Jest jeszcze inny sposób na konflikty nazw, ale mniej wygodny: wszystkie “nazwane” elementy powiązać z odpowiednimi klasami, a w actionscripcie wstawiać ich egzemplarze w odpowiednie miejsca, np.:

moj_programowy_mc = new MojRecznyMC;
moj_programowy_mc.x = 10;
moj_programowy_mc.y = 10;

Jednak kiedy taki obiekt zawiera kilka nazwanych elementów, np. pól tekstowych, zabawa robi się żmudna.

Next Page »