Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание и подключение библиотеки к проекту. (http://www.flasher.ru/forum/showthread.php?t=134410)

rabiter 29.12.2009 16:34

Создание и подключение библиотеки к проекту.
 
Доброго всем дня (или ночи :-))
Помогите пожалуйста советом.
Планирую написать игрушку используя ActionScript 3 и IDE Flex Builder. Все хорошо с алгоритмической точки зрения, но вот вопрос возник при работе с картинками.
Допустим, нарисовал я персонаж игры, кадров 5, которые образуют мультиплекацию.

Конечно, если эти картинки хранить в файле на сервере, то я могу их динамически подгрузить в BitmapData:
Код AS3:

var _loader:Loader = new Loader(  );
_loader.load(new URLRequest("image.jpg"));

Но, разумеется, это не есть айс. Все ресурсы и код в конечном итоге должны быть представлены единственным конечным файлом SWF.

Просветите начинающего, есть наверное какие-нибудь библиотеки ресурсов или что-нибудь аналогичное, куда можно сохранить и звуки, и картинки. Подключить в проекте эту библиотеку и после компиляции получить SWF файл, включающий в себя все это добро?

Если есть, то как работать с этой библиотекой (и чем).

Сайлас 29.12.2009 16:44

Ну если просто встроить картинку во Flex Builder можно сделать так:
Код AS3:

[Embed (source="image.jpg")]
private var ImageClass:Class;

а дальше делать new ImageClass

Можно все картинки во Flash (в смысле среда разработки) собрать все картинки в одну свфку, закэспортив их для AS, и делать так:
Код AS3:

[Embed (source="imageContainer.swf", symbol='Image1')]
private var Image1Class:Class;
[Embed (source="imageContainer.swf", symbol='Image2')]
private var Image2Class:Class;

А дальше делать аналогично тому как выше указано

А можно во Flash собрать все картинки, заэкспортить их для экшнскрипта и заэкспортить в SWC, а затем включить в flex Builder.

Вот кстати, если бы кто-то сумел бы собрать все директивы компилятора FB собрать и выложить со всеми их параметрами, то было бы круто. Потому что внятного мануала я так и не нашел по ним. Каждый раз приходится что-то выискивать по этому поводу.

rabiter 29.12.2009 16:54

Большое спасибо!
Про ембед не знал раньше. Embeded resources это конечно можно, но тоже не совсем хорошо, потому что картинок можеть быть тьма, и для каждой из них использовать метадирективу embed неудобно.

А вот второй вариант с SWC - похоже это правельный путь.

Сайлас 29.12.2009 17:04

Цитата:

Сообщение от rabiter (Сообщение 875988)
Большое спасибо!
Про ембед не знал раньше. Embeded resources это конечно можно, но тоже не совсем хорошо, потому что картинок можеть быть тьма, и для каждой из них использовать метадирективу embed неудобно.

А вот второй вариант с SWC - похоже это правельный путь.

Можно еще сделать SWFку одну, заэмбедить ее, затем вгрузить ее как лоадером и получить доступ ко всем объектам в ней, как к классам


Код AS3:

[Embed (source="test.swf", mimeType="application/octet-stream")]
public static var swfBytes:Class;
 
var loader:Loader = new Loader();
loader.loadBytes(new swfBytes);


rabiter 29.12.2009 17:43

Спасибо :) Осталось с SWC разобраться. В любом случае, чтобы собрать SWF или SWC надо будет поставить Flash 8 или Flash MX 2004.

Jewelz 29.12.2009 17:46

будьте современнее :)

ставьте хотя бы cs3, ну а вобще уже скоро cs5 будет :)

rabiter 29.12.2009 17:58

Попробую CS4 :)

В чем принципиальные отличия Flash MX 2004, Flash 8, и Adobe Flash CS3, CS4 ?

Jewelz 29.12.2009 18:02

а SWC для as2 вобще можно собрать? я если ставлю в настройках проекта as2 - сразу пропадает пункт "export swc"

rabiter 29.12.2009 18:09

Чего не знаю, того не знаю )

alatar 29.12.2009 18:49

Цитата:

Сообщение от rabiter (Сообщение 876017)
В чем принципиальные отличия Flash MX 2004, Flash 8, и Adobe Flash CS3, CS4 ?

Принципиальная разница в поддержке AS3.

rabiter 30.12.2009 01:39

С метатегом embed разобрался, можно скомпилировать swf и заэмбедить ее в AS3-проект в FB:

Код AS3:

[Embed (source="c:\\Untitled-1.swf", symbol='Symbol4')]
private var Image1Class:Class;
private var r:Sprite = new Image1Class();

Но все же, как добраться до классов внутри SWC из ActionScript 3 ?

В cs3 создаю символ, делаю linkage, выставляю галочку "Export for AS", прописываю Class (например MyClass) и base class = "flash.display.MovieClip"

Далее щелкаю на символ в библиотеке ПКМ и осуществляю "Export SWC to"

После чего полученный swc файл я добавляю во вкладку "Library path" в свойствах AS проекта в FB.

SWC импортируется, причем если его развернуть и посмотреть что внутри, то увидим
Source attachment: (None)
Link Type: Megred into code
RSL USL: (n/a)
Auto extract swf: (n/a)

Подскажите пожалуйста, как в коде AS3 можно работать с импортированным только что классом MyClass в SWC ?

wvxvw 30.12.2009 02:03

Как и с любым другим - new MyClass ();

dimarik 30.12.2009 10:31

Цитата:

[Embed (source="c:\\Untitled-1.swf", symbol='Symbol4')]
Только пропадет код, если что.

rabiter 30.12.2009 11:12

Цитата:

Сообщение от dimarik (Сообщение 876125)
Только пропадет код, если что.

Если имеется ввиду код, написанный в swf, то ничего страшного, там кода и не планируется.
Код будет писаться только в DB, в swf будут только картинки, звуки.

Добавлено через 32 секунды
Спасибо всем за помощь :)

Cobolin 04.01.2010 00:57

Та же ситуация что и выше.
В общем идея такая - рисовать в FlashIDE, компилить и писать код в FlexBuilder.
1. Создал проект в FlexBuilder.
2. В нем создал кастомный класс Hero.as
3. Открыл FlashIDE, создал там мувик, нарисовал что то в нем.
4. Сделал Linkage к классу Hero.as
5. Експортнул в SWC
6. SWC подключил в проект во FlexBuilder (... library path-> Add SWC)
7. В главном классе приложения создал экземпляр класса Hero и сделал addChild
Запускаю и ничего не видно. В принципе правильно, так как проект во FlexBuilder знает о классе Hero, экспортированная SWC (из FlashIDE) знает о классе Hero, а класс Hero не знает о SWC и то что в нем есть мувик к которому он приатачен (или наоборот), ну вообщем то что они связаны и потому получается что создается пустой мувик и на экран ничего не выводится.
Вопрос - как правильно создавать такие SWC и потом правильно вытягивать из них мувики чтобы они соотносились с правильным классом?

Добавлено через 12 часов 5 минут
Все вопрос решен. Кому будет интересно пишу ниже.
Получилась вот что. Все что сделал описал выше в 7 шагах, а потом что я пронаблюдал:
В проекте есть класс Hero который был использован при линковании с мувиком.
Вот только после экспорта в SWC FlashIDE вкомпиливает этот класс в SWC и получается что когда мы присоединяем SWC к проекту (в Flex Builder) то у нас на самом деле есть два независимых Hero класса в одном проекте - одни в SWC, а один в самом проекте, да плюс к тому же они имеют одинаковые пакеты.
И фишка в том что в таком случае FlexBuilder не выкинул ни какую ошибку мол типа конфликт имен классов или что то такое, поэтому сразу и не понял почему при создании экземпляра Hero не показывался на экране - просто брался класс из проекта (то есть в котором нет никакой графики), а не класс из SWC.
И как только я переименовал класс Hero в проекте обнаружил что стал доступен класс Hero из SWC, а до этого среда показывала что есть только один класс Hero (но это и понятно так как не может быть два одинаковых класса в одном пакете).
Создал его и все уже отображается.
Еще фишка в том что когда попробовал переименовать переименованный класс Hero обратно то среда сказал что не может этого сделать так как в скопах уже есть такой класс.

rabiter 10.01.2010 13:46

Да, я тоже сначало по незнанию создавал зачем-то в AS3 проекте класс с именем, которое указывал в linkage в Flash IDE при экспорте в SWC. Конечно тоже ничего не отображалось)
Сам импорт SWC во Flex подразумевает в себе то, что классы, которые присутствуют в SWC будут описаны и доступны из AS3 во flex'е.


Часовой пояс GMT +4, время: 03:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.