![]() |
Свойства загруженного в прелоадер объекта
Вечер добрэ.
Вот так, у меня выглядит внешний прелоадер: Первый кадр: Код AS3:
Код AS3:
Вопрос. Как узнать точную ширину и высоту загруженного объекта(его рабочей области)? |
Вроде бы Loader.contentLoaderInfo.width и Loader.contentLoaderInfo.height.
|
Цитата:
|
Код AS3:
|
Цитата:
Код AS3:
Следующий вариант хорош, он возвращает то, что как раз и нужно, но он доступен только для чтения: Код AS3:
|
А не пробовали изменять размер в контейнере? думаю это и есть выход
|
Исходник можете выложить?Двух файлов.
Добавлено через 1 час 39 минут Попробуйте так Код AS3:
|
Вложений: 1
Цитата:
Цитата:
Первый кадр: Код AS3:
Код AS3:
|
Поставьте во второй кадр и протестируйте
Код AS3:
|
belv. По идее работает и у меня. Но зря вы переместили trace() в конец. Попробуйте вставить его обратно и посмотреть, правильные ли размеры возвращаются. И сами убедитесь.
Файл который я скинул test1.swf имеет размер рабочей области 330х250. В его сцене имеется всего лишь один объект(закрашеный синим цветом прямоугольник) размером в 150x150 пикселов. В итоге. Когда мы пытаемся загрузить этот файл в прелоадер выходит следующее: Код AS3:
Вставьте trace(ldr.width) и trace(ldr.height) в то место, где они стоят у меня в коде и посмотрите результат. Добавлено через 21 минуту В моём случае, получается так, что ldr.width и ldr.height меняют не размер рабочей области загруженной flash'ки, а тот прямоугольник расположенный в нём.. Вот в чём загвоздка. |
По-порядку
ldr - это объект Loader. ldr.content - это то что вы загрузили в Loade, в вашем случае объект MovieClip; ldr.width и ldr.height берут свои значения визуального объекта test.swf опустил trace вниз , потому что вы ниже меняете значения ширины и высоты Так тоже работает Код AS3:
и height у LoaderInfo только для чтения. ldr.contentLoaderInfo.width берет значение свойства .stage.width загружаемой флешки . а когда она загрузилась stage у них становится общий , тот куда она была загружена . |
Вложений: 1
belv. Да, но смысл вот в чём.. Если в начале кода(во втором кадре), поставить trace(ldr.content.width) и trace(ldr.content.height) и ради интереса посмотреть, какие же значения возращаются. То мы увидим, что возвращаются размеры 150x150 пикселей,а не 330x250 пикселей. Вот, что у меня получается в процессе компилирования сцены(изображение):
|
Посмотрите слудующие примеры:
Код AS3:
Возвращаясь к изображению.. Синий квадрат, должен быть ровно по середине рабочей области. Но так как я не могу выставить ширину и высоту загруженной flash'ки, квадрат смещается вправо и позиционируется в окне уже неверно. Добавлено через 5 минут Следовательно, используя ldr.content.width, мы не сможем выставить ширину, так как он выставляет ширину не рабочей области flash'ки, а ширину синего квадрата. То же самое и с ldr.content.height. Отсюда и вся неурядица.. |
Я так и не понял, чего вы в результате хотите. Зачем вам менять размер рабочей области? Штатными средствами это сделать не получится. Нештатными - вполне. Грузите флешку как массив байт, смотрите заголовок, при необходимости - распакуете, правите в метаданных размер (он в фиксированной позиции после распаковки будет), загружаете как массив байт. Только вот на что именно вы будете править? И какой в этом смысл? Объекты за пределами рабочей области тоже будут видны и сами никуда не переместятся.
Вам или правиьный scollRect нужен, или loader.getBounds(loader)/loader.content.getBounds(loader.content). И центрировать относительно настоящего размера и границ. В реальной задаче и scrollrect и bounds могут понадобиться. Bounds вообще всегда нужны, когда точка привязки не совпадает с левой верхней визуальной границей. А еще некоторые проблемы решаются организационными методами, после которых вторая флешка имеет всегда правильный размер. |
Вложений: 1
Цитата:
|
мда...
имеем 550х400 из свойств width и height объекта contentLoaderInfo имеем сам конетнт с размерами 150х150 имеем размеры нужного прямоугольника до которого нужно сдать наши 550 и 400 соответственно. например возьмем 300х300; далее: content.scaleX = 300/550; content.scaleY = 300/400; думается мне что так как-то.. |
Код AS3:
test1.swf я сделал следующим способом. Открыл редактор, назначил в свойствах сцены размеры 330 px по ширине и, 250 px по высоте. Далее вставил прямо в центр сцены прямоугольник синего цвета, со сторонами 150 на 150 px по ширине и высоте. И сохранил в swf формат. То есть в этой flash'ке, у нас имеется только сцена с прямоугольником посередине. Идём далее. Загружаю данную flash'ку в свой прелоадер и сморю какие размеры показываются. В итоге: Код AS3:
|
А почему Вы не хотите поставить синий квадрат по координатам x=0 y=0 а в загружающей флешке позиционировать так как вы пишете?Чтобы не было смещения.
|
Цитата:
Добавлено через 2 минуты Вся проблема в том, что ldr.content.width возвращает не размер flash'ки, а размер синего прямоугольника. А следовательно, через этот вариант, пытаясь установить новые значения для flash'ки, мы на самом деле установим значения для этого синего прямоугольника. Вы можете сами в этом убедиться. |
если вы зададите ldr.x= 0 и ldr.y =0 , то увидите смещение
относительно верхнего левого угла.Об этом и писал maxkar |
Цитата:
Код AS3:
|
Вложений: 2
Сделал скриншоты, для наглядности. Здесь видно, какие значения ширины и высоты, возвращают нам те или иные функции.
|
Ну cleptoman уже сказал, что делать. Вычисляете scale (именно scale!, не ширину/высоту) по loader.contentLoaderInfo и требуемому размеру. Затем устанавливаете это scale в loader или loader.content (не ширину/высоту, scale!). И затем уже вычисляете положение флешки. Причем вычисляете не исходя из чьей-то ширины, а вручную вычисляя эффективные значения размера сцены, используя выбранный scale и loader.contentLoaderInfo.
|
maxkar. Окей, спасибо. Попробую сделать.
Добавлено через 3 часа 27 минут Весь выходной сегодня на смарку.((((( А как правильно масштабировать? Я написал так: Код AS3:
Добавлено через 20 часов 11 минут Проблему с масштабированием решил. Всем спасибо. Пример на следующем коде: Код AS3:
|
| Часовой пояс GMT +4, время: 02:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.