Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Заставить FD вкомпилировать все классы из указанного пакета (http://www.flasher.ru/forum/showthread.php?t=211867)

caseyryan 30.11.2015 10:05

Заставить FD вкомпилировать все классы из указанного пакета
 
Знаю, что где-то подобная тема была, но что-то не могу найти. Собственно вопрос: как заставить FD (или компилятор через FD) компилировать даже те классы, которые нигде не импортированы и никак не упоминаются. Нужно, чтобы getDefinitionByName() работал без упоминания классов в проекте.
Уже весь нет перерыл, и на форуме FD тему создал. Пока безрезультатно

Tails 30.11.2015 10:18

Если классы в swc, то можно в её контекстном меню выбрать Options, там можно указать тип подключения. (Обычная, полная, расширяющая)

caseyryan 30.11.2015 11:21

Нет, они просто текстовые
Я постоянно забываю упомянуть какой-нибудь новый класс в проекте, и получаю рантайм ошибку при попытке создать объект на его основе.
У меня в игре в описании локаций прописаны текстовые пакеты и классы объектов, которые должны использоваться в той или иной локации.
Это конечно не принципиально, но хотелось бы автоматизировать процесс

Tails 30.11.2015 12:04

Не очень понимаю, зачем использовать getDefinition, если классы не подгружаются внешне, а уже содержатся в проекте?

callme 30.11.2015 17:37

Можно в project properties->build->pre-build с помощью .bat файла например генерировать .as файл с упоминанием всех классов.

caseyryan 30.11.2015 18:10

Цитата:

Сообщение от Tails (Сообщение 1189296)
Не очень понимаю, зачем использовать getDefinition, если классы не подгружаются внешне, а уже содержатся в проекте?

Затем, что объект, который должен использоваться в локации, указывается в XML файле описания локации. Все создается динамически, а не захаржкожено куда-то. Естественно, компилятор, не найдя нигде в движке игры упоминания этих классов, в финальный файл их не добавит
Эти классы не используются нигде сразу, а должны быть доступны исплючительно по требованию
Цитата:

Можно в project properties->build->pre-build с помощью .bat файла например генерировать .as файл с упоминанием всех классов.
Ну да, как вариант. Если нет каког-нибудь более красивого способа

KBAC 30.11.2015 19:23

Использовать что-нибудь типа фабрики и энумератора типа объектов? Не тащить классы в данные, а вместо этого хранить тип объекта по которому генерить объект нужного класса. Так классы не потеряешь и данные чистые. При этом инфа о конкретных классах будет только внутри фабрики.

Хотя это оффтоп по теме

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
Все работает как по маслу)

samana 01.12.2015 01:16

Цитата:

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

caseyryan 01.12.2015 07:04

Цитата:

Сообщение от samana (Сообщение 1189306)
Я наверно первый раз увидел батник и у меня сломались глаза. Поражаюсь, как в этом вообще можно разобраться... круть)

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


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

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