Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Не клянчу рыбу, прошу удочку! Подскажите куда копать. Хочу попробовать реализовать возможность дописывания плагинов к основной проге. Ну что-то похожее было в Морровинде, скачиваешь новый файл со своим медиа, к примеру остров, он появляется в игре. Или, грубо, тачки реализованы в виде отдельных файлов, не просто набор поликов и текстур, а полноценный механизм, то есть кусок програмного кода. Закинул файл в нужную папку - новая тачка появилась в игре. Или расширение функций перса, ну к примеру летающий ранец - как отдельный файл, найти его в игре можно только если этот файл лежит в определённой папке, но без него перс в принципе не летает.
Возлагал надежды на Include filename$ но он даже по условию не работает. Как я это ваще вижу: некая функция сканирует определённую директорию на наличие там определённых файлов. Появился новый файл - кусок кода, и функция встраивает этот кусок в тело программы, видимо в основной цикл или... не знаю вобщем. И всё, и вот в игре появились птицы, или по небу кроме солнца побежала ещё и луна со всей реальной периодичностью. Или периодически стали происходить землетрясения, или помимо гоночных тачек появился эксковатор. Такая вот загогулина... Это вообще возможно силами одного Блица сделать? Доп. условие в том что ничего кроме бейсика я не знаю, ни в С++, ни в паскаль лезть не хотелось бы. Заранее всем благодарен. |
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Плагины реализуются через загрузки внешних библиотек. Которые должны реализовывать определенный интерфейс, благодаря которому возможны вызовы заранее не известного кода.
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
вроде есть луа под блицем - гугли
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Э-м-м-м... Ну а вот такой ход, что скажете: основная прога сканирует директорию, находит новый файл .exe, дале ExecFile( file$ ) и постоянно слушает определённый порт. Вторая прога по тому самому порту по протоколу ТСР дует данные, координаты вертексов, текстуры, анимацию и т.д. При этом слушает порт-ответку основной проги, при чём внешне это выглядит как работа "демона", то есть никак, прога себя не проявляет вообще, просто вычисляет и дует в порт данные. Эдакое подобие клиент-серверной связки наоборот. А первая прога работает с 3D, визуализирует, управляет вычислениями второй, и в конце даёт команду на самозакрытие. Сойдёт за плагин?
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Это не плагин. Плагин это дополнительная библиотека, подключаемая по заранее согласованному интерфейсу. Программа работает с ней как со своими собственными функциями.
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Небольшое описание что в моём представлении может быть плагином:
Предположим есть приложение, редактор уровней. Само приложение имеет открытый API - набор функций, которые в плагинах можно использовать. Например через эти функции можно получить доступ к определённому объекту в мире, его параметрам, и манипулировать им (ну это самые простые примеры). Также API имеет интерфейс по работе с GUI редактора (создавать окошки, кнопочки и т.п.). Далее этот API доступен в виде библиотеки. Каждый плагин имеет две функции Load и Unload. При включении приложения (или другом событии), для каждого плагина вызывается Load функция, и при закрытии Unload соответственно. Далее пример плагина - чтобы имел кнопку с удалением всех объектов определённого типа. В функции Load мы создаём панельку, и пихаем её куданить в редакторе, это проделываем через GUI API предоставленным редактором. Далее пишем уже логику для своего созданного GUI, в нашем случае одна кнопка, при нажатии на которую, используя API, мы найдём все объекты например типа "персонаж", и удалим их снова используя API. Получается что подключая этот плагин, он создаст панельку с кнопкой, которая будет удалять определённого типа объекты со сцены мира в редакторе. Пример простейший. Но думаю понятен достаточно. Говоря о Blitz3D, не заморачивайся. Я рекомендую даже и не пытаться начинать что-то делать такого рода на блице - ты потратишь в пустую кучу времени, а результат если и будет, то весьма скудный. Такие вещи проще делать на OOP языках, напримерв .Net такое сделать вообще сказка, и намного сложнее, хотя бы основываясь возможности использования объектов между ассемблями (библиотека содержит не тупо список функций, а полноценные классы и т.п.), также есть рефлекция - это для плагинов ваще сказка. В общем, на Blitz3D, не советую заморачиваться о таких вещах, он убог. |
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
На блитце сделать поддержку плагинов - очень даже можно. Смотри в сторону функции CallDLL.
Ну а так, я считаю более универсальным способом плагиностроя - это подгрузка скриптов. Например нечто похожее есть в 3DMax под названием MaxScript, но Lua ИМХО - лучше, в нем есть оператор require который позволяет динамически перегрузитиь скрипт, все изменения в скрипте немедленно вступают в силу. |
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
В Blitz3D не имеет смысла открытая архитектура - это имхо - извращение, и ничего не даст - в древности сам этим заморачивался но понял пототом, что у каждого языка свое назначение, время и возможности.
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Цитата:
|
Часовой пояс GMT +4, время: 11:10. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot