Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Библиотека ресурсов при помощи mxmlc (http://www.flasher.ru/forum/showthread.php?t=154101)

Aloran 12.04.2011 19:16

Библиотека ресурсов при помощи mxmlc
 
Создаю библиотеку ресурсов (картинки, шрифты и т.д.) при помощи as-файла и компилятора mxmlc, а не при помощи fla-файла. При компиляции swf, в него попадают не нужные мне классы из пакета mx.core. Есть ли какая то возможность сделать так, что бы они в библиотеку не попадали?

Образец класса библиотеки:
Код AS3:

package {
import flash.display.Sprite;
 
public class Main extends Sprite
{
    [Embed(source = '../bin/img1.png')] private static const Image1:Class;
    [Embed(source = '../bin/img2.png')] private static const Image2:Class;
    [Embed(source = '../bin/img3.png')] private static const Image3:Class;
    [Embed(source = '../bin/img4.png')] private static const Image4:Class;
 
    public function Main():void
    {
    }
}
}


f.g.programmer 12.04.2011 20:35

Есть, но для каждого ресурса нужно создать отдельный класс, типа
Код AS3:

package  
{
        import flash.display.Bitmap;
 
        [Embed(source='../lib/image.png')]
        public class image1 extends Bitmap
        {
                public function image1() {
                        super();
                }
        }
 
}


Aloran 13.04.2011 00:06

что то данный код не компилится... пишет Error: A file found in a source-path 'Main' must have the same name as the class definition inside the file 'Img'.
Если же сделать так:
Код AS3:

package {
import flash.display.Bitmap;
import flash.display.Sprite;
 
public class Main extends Sprite
{
    [Embed(source='../lib/image.png')]
    public class image1 extends Bitmap
    {
        public function image1() {
            super();
        }
    }
    public function Main()
    {
    }
}
}

то выдает Error: Classes must not be nested.

wvxvw 13.04.2011 00:22

Пример f.g.programmer правильный, просто вы не правильно говорите компилятору, где находятся ваши файлы (либо вам нужно правильно указать classpath (параметр -cp) либо вы как-то не-так файл назвали.

Aloran 13.04.2011 00:49

Все может быть и даже не может быть, а так и есть.
Как я делаю...
Создаю as3 проект во FlashDevelop и в классе Main "эмбедю" картинки (ПКМ по картинке -> Insert Into Document) и далее пишу как у f.g.programmer...
Если не жалко времени (аль еще чего) скиньте архивчик с тестовым проектиком. Может покопавшись в нем найду свою ошибку.

Кажется сам разобрался... я так понимаю что для каждой картинки надо создавать отдельный as-файл?

f.g.programmer 13.04.2011 01:05

Да, чтобы мой пример работал, нужно поместить код в файл image1.as и разместить его в корневом пакете.
Генерировать такие классы можно автоматически.

Aloran 13.04.2011 09:57

А подскажи, каким образом ты их так генерируешь?

f.g.programmer 13.04.2011 20:40

Это можно делать практически на любом языке, принцип такой:
1. готовится минимальный шаблон, например
Код:

package { import flash.display.Bitmap; [Embed(source='(PATH)')] public class (NAME) extends Bitmap {} }
2. формируется список имя => путь с ресурсами, например
("image1" => "e:/image1.jpg", "image2" => "e:/image2.jpg")
3. генерируются as файлы подстановкой в шаблон имени и пути
4. генерируется ещё один класс, который импортирует все сформированные классы, и компилируется

Aloran 15.04.2011 19:14

В итоге решили, что наличие классов из пакета mx.core, не критично и лучше обойтись без создания лишних файлов...
Но тут есть еще один недостаток: при компиляции к именам классов добавляет имя основного класса. Т.е. если смотреть на пример из первого поста, то в итоге, в либе, получаем классы Main_Image1, Main_Image и т.д. Как это побороть?

f.g.programmer 15.04.2011 19:24

Скорее всего никак, но ничто не может помешать вам удалить лишние файлы после сборки библиотеки также автоматически.


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

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