Компилируйте код в Flash Develop, а графику в Flash IDE

Хочу поделиться навыками организации работы с flash, которые я получил на свой недолгий опыт flash-разработчика. Я думаю, эти рекомендации прежде всего будут полезны новичкам. Статья касается прежде всего разработки flash-игр.

Говорить я буду о работе с Flash IDE, Flash Develop(AS3) и GIT.

Flash IDE — используйте для работы с графикой.

FlashDevelop — для кода.

GIT — для контроля версий.

Статья 1. Компилируйте код в Flash Develop, а графику в Flash IDE.

Если вы разрабатываете более-менее сложную по коду игру, вам много приходится работать с кодом. Если вы правите as-файлы в Flash Develop, а потом компилируете игру в Flash IDE — это ваша первая ошибка. Я раньше тоже так делал. Теперь я делаю графику в Flash IDE и экспортирую её в swc-файл. Потом редактирую код в Flash Develop и компилирую его через Flex.

Этот подход дает следующие преимущества:

  • Компилируется в разы быстрее. Компиляция происходит значительно быстрее, за счет того, что графика уже «готова к употреблению».
  • Flash Develop подхватывает классы из SWC. В коде доступны классы из библиотеки. Не скажу, что это больше преимущество, но это плюс.
  • Работает debug. Удивительная вещь! Раньше у меня отладка сводилась к применению trace, а теперь можно делать полноценную отладку! В случаях ошибки также Flash Develop переключается на отладку и останавливает работу на строке с ошибкой.

Пример.

  • Если у вас стоит старая версия FlashDevelop — смело удалите все пользовательские файлы(Tools->Application files) приложения и перезапустите программу.
  • Ещё понадобится Java, .NET2-3.

Всем своим сердцем я надеюсь, что у вас уже установлен Flex SDK.  Если нет — устанавливаем (Скачать Flex 4). Установленным должен быть и FlashDevelop (Скачать FlashDevelop). Там же есть инструкция по настройке.

Открываем FlashDevelop. Выбираем Project->New Project… и создаем проект «AS3 Project».

После этого должен получится примерно такой состав проекта:

Компилируем его (Enter+Ctrl). Если появилось пустое окно Flash Player — значит все работает правильно. Если нет, внимательно читайте окошко Output(там может быть намек на ошибку), и пишите в комментариях.

Настраиваем Flash IDE. Создаем новый AS3 проект. Создаем для проверки Символ в библиотеке.

Файл сохраняем в  проекте, в папке «lib». Заходим в Flash IDE->Файл(File)->Параметры публикации(Public settings)->Вкладка «Flash»->Ставим галку «Экспортировать SWC-файл». Публикуем проект(Alt+Shift+F12). В папке lib должен появится файл swc:

Как мы видим, в проекте FlashDevelop появился файл swc с списком классов в нем. Теперь необходимо его подключить: Project->Properties->Compiter Options->Добавляем в SWC Libraries наш swc файл.

Для проверки попробуем использовать класс из swc-файла в нашем коде (Main.as):

private function init(e:Event = null):void {
...
addChild( new myMovieClipClass());
}

Компилируем, и видим, что все получилось:

Да, конечно такой вид работы потребует от Вас изменения стиля разработки игр, если вы делали их по-другому. Лично у меня переход игры на такой стиль потребовал пару часов. Кое-какие привычные вещи придется сделать кодом. Но поверье, все это окупится теми плюсами, которыми обладает данный метод работы.

Продолжение следует.

P.S.

Решил переделать то, что начал делать, под этот метод. Раньше в библиотеке был мувиклип button, для него был прописан и создан класс (ui.MyButton) с определенной функциональностью. Вот вкомпилил я этот мувиклип в swc. Ну не получается у меня создать экземпляр этого символа из библиотеки, и чтобы у него был весь этот функционал. Создается я так понял просто экземпляр класса ui.MyButton. Направь на правильный путь плиз.

Весь вопрос в том, что получается ты вкладываешь функциональную часть в swc файл(логику в графику), а потом опять эту графику опять вкладываешь в логику. Это не правильно с точки зрения похода. Я понимаю, что это накладывает некоторые ограничения на процесс разработки, но тебе нужно добавлять ui.MyButton уже непосредственно в коде, программно задавая им позиции.
К примеру, у меня есть MovieClip mcLevelMapLightClass, а функциональность я уже добавляю в FlashDevelop:

public class LevelMapLight extends mcLevelMapLightClass

Дальше я знаю 2 варианта:
1. Считывать положения конкретных MovieClip на сцене и заменять их уже функциональными с соотв. положением.
2. Сделать конфигурацию (я сделал в XML) положений элементов и добавлять их в соотв. с этой конфигурацией.
Конечно, проще накидать элементы в Flash IDE. А тут приходится это делать кодом. Сначала непривычно. Но в большинстве случаев это занимает не так много работы, как кажется.

Пример:


// Создаем положения для кнопок
var btnConf:XML = <root>
	<item x="63" y="267" />
	<item x="150" y="267" />
	<item x="195" y="249" />
	<item x="195" y="288" />
	<item x="232" y="288" />
	<item x="232" y="249" />
	<item x="269" y="267" />
	<item x="360" y="267" />
	<item x="360" y="222" />
	<item x="415" y="210" />
	<item x="415" y="325" />
	<item x="475" y="325" />
	<item x="535" y="325" />
	<item x="535" y="210" />
	<item x="475" y="210" />
	<item x="475" y="265" type="big" />
</root>

// Создаем кнопки согласно конфига
for (var i:int = btnConf.item.length() - 1; i >= 0 ; i-- ) {
	// Создаем экземпляр кнопки
	var newButton:LevelMapLight = new LevelMapLight();
	
	// Присваиваем ей имя
	newButton.name = "mcBtn" + Math.round(i+1);
			
	// Устанавливаем положение
	newButton.x = btnConf.item[i].@x;
	newButton.y = btnConf.item[i].@y;
	
	// Сохраняем кое-какие данные			
	newButton.userData = i + 1;

	// Добавляем обработчик, который вызовется по нажатию
	newButton.click_hendler = function(e:MouseEvent):void {
		Game.instance.currentLevelNumber = e.currentTarget.userData;
		startGame();
	}

	//Добавляем на сцену				
	addChild(newButton);
}


2010.08.31