PDA

Просмотр полной версии : импорт из swc


Дед Анвирыч
09.03.2010, 03:52
Доброго ночи-утра )
столкнулся с такой проблемой:
понадобилось создавать из библиотеки битмапы. Настраиваем в библиотеке экспорт и все как бы работает. но т.к изображений ~250 собирает cs4 swf'ку безбожно долго - больше минуты.
Появилась мысль вынести эти битмапы в отдельный swc, импортнуть и пользоваться.
сказано - сделано )
скомпилял swc, подключил к основному проекту. прописал импорт.
import testbitmapdata
скомпилил. быстро )
Пытаюсь создать объект
trace(new testbitmapdata(0,0))
- борода. нет такого объекта и все.
убрал строчку импорта - ругается при компиляции, что незнает про testbitmapdata.
т.е. явно он его увидел
пробую так
trace(new testbitmapdata())
ругается, что надо 2 параметра.
т.е. все ок - компилятор его видит, но в рантайме этого объекта нет
полез в size report - думал там что полезного увижу. там про testbitmapdata ничего :(

Собственно 2 вопроса
1) как заставить этот обхект создаваться в рантайме?
2) может есть какие-то другие способы чтобы компилять быстрее при большом количестве залинкованных объектов в cs4

Заранее благодарен

TERRORist
09.03.2010, 12:12
не знаю как в дефолтной IDE, а в FlashDevelop импорт не нужно писать. просто trace(new myclass(params))

Дед Анвирыч
09.03.2010, 13:30
Да и черт бы чей с ним, с импортом )
главное чтоб в рантайме классы были доступны

Finji
09.03.2010, 13:59
А в чем компилится основной проект?

chabapok
09.03.2010, 14:03
Как подключали swc к основному проекту?
в настройках публикации есть парамтры и там можно указать внешние библиотеки. Причем там указать можно 2мя способами
1. путь к библиотеке
2. путь к ВНЕШНЕЙ библиотеке.

так вот если сделать способом 2 -- работать не будет. (непонятно вообще зачем оно)

и еще советовали, чтобы картинкам не просто класс, а и имя пакета было присвоено. То есть там где as3 class пишите mypictures.pictA
При импорте, соответственно, тоже.

Дед Анвирыч
09.03.2010, 15:44
ДА! пункт 1 помог :) Спасибо.

Но возник новый геморрой
getDefinitionByName('testbitmapdata');
возвращает null
причем хоть с именем пакета указывать имя, хоть без

dimarik
10.03.2010, 00:31
А Вы его(её?) загрузили в ApplicationDomain.currentDomain, чтобы спрашивать как getDefinitionByName? Нет. И не загрузите.

Давайте разделять понятия compile- и run-time.

Дед Анвирыч
10.03.2010, 00:57
эээ... ну если он скомпилился и создается как
new testbitmapdata();
неужели его по имени создать нельзя? :(
тогда вся прелесть этого дела пропадает :(

Hidest
10.03.2010, 01:03
Эм... два параметра, которые он хочет - это ширина и высота той битмапы, которая у вас должна получится... типа, они обязательные... По крайней мере сталкивался с таким поведением.

Дед Анвирыч
10.03.2010, 01:06
С параметрами вопрос решен установкой базового класса с конструктором без параметров, это не беда :)

dimarik
10.03.2010, 01:31
Эм... два параметра, которые он хочет - это ширина и высота той битмапы, которая у вас должна получится... типа, они обязательные... По крайней мере сталкивался с таким поведением.

Сам кэп с нами!

Котяра
10.03.2010, 10:06
Нормальный ответ. Другой вопрос зачем адобовцы оставили эти параметры в конструкторе? Они ведь ни на что не влияют... Я одно время очень с этим парился - создавал через jsfl xml в котором записывал размеры битмап - уже вложенных в swf. пока не понял что эти параметры не нужны.))))) Очень нехилый ввод в заблуждение.

Добавлено через 7 минут

1) как заставить этот обхект создаваться в рантайме?

А вы уверены что вам нужен именно и swc и рантайм?

Для включения всех классов swc в FD установите галочку на библиотеке как Included library, чтобы в итоговый swf попали все классы а не только вызываемые явно через new. как делать в недоИде CSx не знаю.

Дед Анвирыч
10.03.2010, 11:40
Мне нужно ускорить компиляцию. 250 битмапов с экспортом в as тормозят сборку до минуты с лишним. если есть какие-то альтернативные методы - буду благодарен, если про них расскажут. Естественно разговор о получении 1 swf на выходе.

dimarik
12.03.2010, 01:56
Есть вариант доверить сборку DeepBlue. Но на хабре за идею меня заминусуют )

Дед Анвирыч
12.03.2010, 09:49
DeepBlue это вроде шахматный копм )

Котяра
12.03.2010, 10:24
если не разобрались объясню ещё раз:
вы создаёте внешнюю swc с набором классов.
если библиотека присоеденена к проекту, то при компиляции основного
swf в него попадают только классы присутствующие явно в коде как new SWCClass();
для того чтобы использовать конструкцию
getDefinitionByName(className) - надо чтобы в итоговую swf классы с className тоже попали.
Для этого нужно установить в опциях подключения библиотеки - "внедрить полностью". в FD - это Included Library (include completely)
как это делается в других IDE не знаю, но наверняка нечто похожее есть..