Лучший способ включить изображения в AS3, чем встроить?

#actionscript-3 #image #actionscript #embed #flixel

#actionscript-3 #изображение #actionscript #Внедрить #flixel

Вопрос:

Я собираю флеш-игру (используя Flixel), и у меня много спрайтов, изображения которых (в основном в формате.png) Мне нужно включить в мою игру. Я привык использовать такой код, как:

 [Embed(source = "../../lib/ship-0001.png")]private var _ship0001Sprite:Class;
  

чтобы включить файл изображения. Есть ли способ, которым я могу это сделать, кроме встраивания? Я бы хотел использовать цикл for, если это возможно, собирая каждый необходимый файл по номеру. Таким образом, вместо этого, если у вас есть несколько строк для каждого типа корабля (чтобы захватить его спрайт, значок, вид хранилища и т. Д.), Я могу просто изменить переменную (например, NUM_SHIP_TYPES) и добавить файлы по номерам для нового корабля.

Является ли внедрение единственным способом сделать это, когда файлы включены в .swf, или есть другой способ, которым я могу это сделать? Или есть способ, которым я могу использовать цикл for с внедрением?

Ответ №1:

Возможно, это не самый популярный ответ. Но это зависит от предпочтений. I'm not trying to start a best practices discussion, just listing a possibility.

Если у вас есть несколько изображений для каждого корабля. И это одинаковое количество изображений на каждый корабль, тогда может быть возможно следующее. Если нет, то полностью игнорируйте то, что я предлагаю.

Создайте папку для каждого из ваших типов кораблей, а затем файл класса в этой папке и поместите свои изображения в эту папку рядом с файлами классов..

 package shipimages.ship1 { class Ship1Images {
    [Embed(source="0001.png")] public var img0001:Class;
    [Embed(source="0002.png")] public var img0002:Class;
    [Embed(source="0003.png")] public var img0003:Class;
} }
  

.

 package shipimages.ship2 { class Ship2Images {
    [Embed(source="0001.png")] public var img0001:Class;
    [Embed(source="0002.png")] public var img0002:Class;
    [Embed(source="0003.png")] public var img0003:Class;
} }
  

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

Комментарии:

1. На самом деле это хорошая идея, хотя вы, вероятно, правы, что это не лучшая практика. Если я сделаю это таким образом, у каждого типа корабля будет своя папка, и все для этого типа корабля будет в этой папке. Спасибо!

2. Эти файлы классов могут быть сгенерированы автоматически с помощью простого скрипта или инструмента, который просто изменяет числа в именах файлов и заменяет их предопределенным шаблоном.

Ответ №2:

Если у вас много ресурсов, лучший способ — оставить их как внешние файлы и использовать Loader для их загрузки.

Таким образом, вы можете отображать индикатор выполнения и, как вы сказали, это также упрощает управление вашими ресурсами.

Комментарии:

1. Вы имеете в виду Loader ?

Ответ №3:

Вы хотите, чтобы объекты были легко доступны в том же swf-файле или вы хотите загрузить их извне. Это был бы первый вопрос, который приходит мне в голову.

  • Если вы хотите встроить изображения в swf: добавьте их все в fla, создайте из него swc и используйте их в своем проекте. Если вы хотите что-то изменить, измените fla. Восстановите swc. Перекомпилируйте.

  • Если вы хотите, чтобы изображения загружались во время выполнения, используйте URLLoader, лично я предпочитаю использовать LoaderMax, который является частью пакета greensock. Это дает вам больше возможностей для работы с загрузкой. Вот пример, который вам поможет: http://www.greensock.com/loadermax-tips /