2008-10-29 18 views
8

Oto sytuacja - mam powłokę, która ładuje zewnętrzny plik .swf. Ten plik .swf ma rozmiar 800 x 600, ale jest to element animacji i istnieją elementy, które rozciągają się poza scenę. Kiedy ładuję plik .swf do powłoki i wywołujemy jego atrybut width, zwraca 1200 - ponieważ zawiera elementy, które wychodzą ze sceny.wymiary załadowanego etapu swf

To nie jest to, czego chcę - najlepiej byłoby, gdyby były dwie właściwości, jedna zwracająca "obliczoną szerokość" i jedna zwracająca "domyślną szerokość". Czy te właściwości istnieją, a jeśli nie, jakie jest najlepsze obejście tego problemu?

Odpowiedz

15

Szerokość i wysokość załadowanego pliku SWF zdefiniowanego przez FLA, który został utworzony, można znaleźć w obiekcie Loader, do którego załadowano plik SWF.

swfLoader.contentLoaderInfo.width 
swfLoader.contentLoaderInfo.height 

To zawsze pokazuje wymiary zdefiniowane we właściwościach FLA. Nie ma znaczenia, czy jakieś obrazy, MovieClips, czy co przedłużyłeś ze sceny.

Właściwości zawsze będą zwracać szerokość stołu montażowego, a faza zawsze będzie najwyższym SWF. Innymi słowy, zawsze będzie to oznaczało wymiary sceny muszli. W aplikacji Flash jest tylko jeden etap.

+0

Dzięki za podpowiedź na temat atrybutu "etap" - jest to sprzeczne z intuicją, prawda? –

+0

ładny! To działa całkowicie! Nigdy nie zdarzyło mi się spojrzeć na obiekt informacji o ładowaczu - zwykle używam zmiennej jednorazowej, aby ją przytrzymać, podczas gdy czekam na załadowanie "prawdziwej" treści, ale mogę spróbować zachować ją w przyszłości ... . dzięki! –

+0

cholera, jeszcze lepiej, możesz po prostu powiedzieć myMovieClip.loaderInfo.width, zamiast utrzymywać oryginalny swfLoader w innej zmiennej - wszystko ładowane przez Loader zachowuje odwołanie do swojego własnego obiektu Loader! –

0

Znak jest bardzo prawdopodobne, że obiekt content loader info będzie zawierał prawidłową szerokość i wysokość. Nigdy się nie sprawdzałem, więc nie mogę tego zagwarantować. Dokumenty mówią "nominalne" i kontrastują z "faktycznymi", więc wydaje się rozsądne.

Istnieje kilka innych opcji. Możesz zamaskować zewnętrzny plik SWF. Utwórz maskę, która jest wielkością sceny i umieść pod nią całą zawartość. Innym pomysłem jest stworzenie klipu filmowego opartego na kształcie prostokąta, który ustawi go na 0, umieszczając go na x: 0, y: 0 i dopasowując jego szerokość i wysokość do sceny. Nadaj mu nazwę instancji, a po załadowaniu użyj tej wartości dla rozmiaru.

+0

Musiałem zrobić szybką naprawę i nie miałem czasu sprawdzić odpowiedzi Matta, a moja szybka korekta była twoją sugestią - zrobiłem dwa MovieClips w załadowanym pliku .swf, który pasował do wymiarów sceny i taki, który otoczył i przekroczył granice stworzone przez elementy przełamujące scenę. –