Просмотр полной версии : Заставить FD вкомпилировать все классы из указанного пакета
caseyryan
30.11.2015, 10:05
Знаю, что где-то подобная тема была, но что-то не могу найти. Собственно вопрос: как заставить FD (или компилятор через FD) компилировать даже те классы, которые нигде не импортированы и никак не упоминаются. Нужно, чтобы getDefinitionByName() работал без упоминания классов в проекте.
Уже весь нет перерыл, и на форуме FD тему создал. Пока безрезультатно
Если классы в swc, то можно в её контекстном меню выбрать Options, там можно указать тип подключения. (Обычная, полная, расширяющая)
caseyryan
30.11.2015, 11:21
Нет, они просто текстовые
Я постоянно забываю упомянуть какой-нибудь новый класс в проекте, и получаю рантайм ошибку при попытке создать объект на его основе.
У меня в игре в описании локаций прописаны текстовые пакеты и классы объектов, которые должны использоваться в той или иной локации.
Это конечно не принципиально, но хотелось бы автоматизировать процесс
Не очень понимаю, зачем использовать getDefinition, если классы не подгружаются внешне, а уже содержатся в проекте?
Можно в project properties->build->pre-build с помощью .bat файла например генерировать .as файл с упоминанием всех классов.
caseyryan
30.11.2015, 18:10
Не очень понимаю, зачем использовать getDefinition, если классы не подгружаются внешне, а уже содержатся в проекте?
Затем, что объект, который должен использоваться в локации, указывается в XML файле описания локации. Все создается динамически, а не захаржкожено куда-то. Естественно, компилятор, не найдя нигде в движке игры упоминания этих классов, в финальный файл их не добавит
Эти классы не используются нигде сразу, а должны быть доступны исплючительно по требованию
Можно в project properties->build->pre-build с помощью .bat файла например генерировать .as файл с упоминанием всех классов.
Ну да, как вариант. Если нет каког-нибудь более красивого способа
Использовать что-нибудь типа фабрики и энумератора типа объектов? Не тащить классы в данные, а вместо этого хранить тип объекта по которому генерить объект нужного класса. Так классы не потеряешь и данные чистые. При этом инфа о конкретных классах будет только внутри фабрики.
Хотя это оффтоп по теме
caseyryan
30.11.2015, 19:53
Собственно, у меня так и есть. Но в том то и проблема, что туда надо указывать вновь созданные классы и удалять убранные вручную. Я забываю это делать, и это уже напрягает)
Я хочу, чтобы я создавал новый класс в определенной директории, и ничего больше не делая собирал проект, а он уже был туда вкомпилирован.
Я уже почти написал батник, как посоветовал callme, но что-то не могу разобраться как мне получить именно имена файлов в директории, а не полные пути к ним. Видимо придется забить на батч, и написать это на си шарпе)
Добавлено через 1 час 10 минут
Все, вопрос решен. Написал батник гененирующий что-то типа энумератора.
callme, спасибо за идею ;)
Собственно, кому интересно, сам батник такой
set DIR=%~dp0
set OUTPUT_FILE_NAME=com\untitledproject\game\levels\ClassDefinitions.as
set OBSTACLES_DIR=%DIR%com\untitledproject\game\view\obstacles
set ENEMIES_DIR=%DIR%com\untitledproject\game\view\characters\enemies
set BOSSESS_DIR=%DIR%com\untitledproject\game\view\characters\enemies\bosses
set NPC_DIR=%DIR%com\untitledproject\game\view\characters\npc
set EXTENSION=.as
set OUTPUT_FILE=%DIR%\%OUTPUT_FILE_NAME%
set PACKAGE=package com.untitledproject.game.levels {
set CLASS= public class ClassDefinitions {
set CONSTRUCTOR= public function ClassDefinitions() {
@echo off
@echo %PACKAGE%> %OUTPUT_FILE%
@echo import com.untitledproject.game.view.obstacles.*; >> %OUTPUT_FILE%
@echo import com.untitledproject.game.view.characters.enemies.*; >> %OUTPUT_FILE%
@echo import com.untitledproject.game.view.characters.enemies.bosses.*; >> %OUTPUT_FILE%
@echo import com.untitledproject.game.view.characters.npc.*; >> %OUTPUT_FILE%
@echo. >> %OUTPUT_FILE%
@echo %CLASS%>> %OUTPUT_FILE%
@echo %CONSTRUCTOR%>> %OUTPUT_FILE%
for %%i in ( %OBSTACLES_DIR%\*%EXTENSION%) do (
echo %%~ni >> %OUTPUT_FILE%;
)
for %%i in ( %ENEMIES_DIR%\*%EXTENSION%) do (
echo %%~ni >> %OUTPUT_FILE%;
)
for %%i in ( %BOSSESS_DIR%\*%EXTENSION%) do (
echo %%~ni >> %OUTPUT_FILE%;
)
for %%i in ( %NPC_DIR%\*%EXTENSION%) do (
echo %%~ni >> %OUTPUT_FILE%;
)
@echo }>> %OUTPUT_FILE%
@echo }>> %OUTPUT_FILE%
@echo }>> %OUTPUT_FILE%
exit;
Ну и сам файл ClassDefinitions нужно упомянуть где-то в проекте
Батник называется FileImporter.bat и лежит в директории src проекта.
А в project - build - pre-build
добавил следующий код
C:\windows\system32\cmd.exe /c start $(ProjectDir)/src/FileImporter.bat
Все работает как по маслу)
сам батник такой
Я наверно первый раз увидел батник и у меня сломались глаза. Поражаюсь, как в этом вообще можно разобраться... круть)
caseyryan
01.12.2015, 07:04
Я наверно первый раз увидел батник и у меня сломались глаза. Поражаюсь, как в этом вообще можно разобраться... круть)
Я не особый специалист по батникам :D Код тут достаточно примитивный, уверен, что его можно написать гораздо лучше. Но мою задачу он выполняет, и мне этого достаточно
alexandrratush
01.12.2015, 11:43
Да, батник вообще не читаем.) Мне кажется что этот же скрипт на Ant'е был куда красивее и проще.:)
caseyryan
01.12.2015, 13:36
Для этого как минимум нужен Ant, и нужно уметь писать под него билд скрипты) Я этого делать не умею, так что, не в моем случае
А батник тут простой. Куда уж проще)
Сначала объявляются переменные со всеми путями проекта, относительно сомого батника
set DIR=%~dp0
Задает переменную DIR с указанием пути к батнику, без учета имени самого батника
set EXTENSION=.as
Указывает на тип файлов, которые нужно искать. Здесь это конечно же ActionScript
Потом идут просто строки формирующие структуру as3 класса: пакет, импорты, название класса, конструктор и т.д.
А дальше циклы в каждой из директорий
for %%i in ( %OBSTACLES_DIR%\*%EXTENSION%) do (
echo %%~ni >> %OUTPUT_FILE%;
)
переменная %%~ni
указывает на то, что используюется только имя файла в директории, без учета самой директории и расширения.
Ну а дальше опять закрывающая структура класса. Ничего сложного.
@echo %PACKAGE%>%OUTPUT_FILE% одна скобка > указывает на то, что файл (OUTPUT_FILE) должен быть перезаписан
А две >> говорят о том, что в него нужно добавлять текст
Это наверно нужно привыкнуть, так как всё равно смотрю и появляется ощущение, что вижу случайный набор символов $&*<&WC>>^!#NP*((*№:")">?A :)
caseyryan
02.12.2015, 09:52
Это наверно нужно привыкнуть, так как всё равно смотрю и появляется ощущение, что вижу случайный набор символов $&*<&WC>>^!#NP*((*№:")">?A :)
Да, язык конечно уродливый :D Но с подсветкой кода в FD все равно как-то по-лучше читается
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.