|
23.02.2012, 18:22
|
#1
|
AnyKey`щик
Регистрация: 27.08.2009
Сообщений: 7
Написано 0 полезных сообщений (для 0 пользователей)
|
Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Не клянчу рыбу, прошу удочку! Подскажите куда копать. Хочу попробовать реализовать возможность дописывания плагинов к основной проге. Ну что-то похожее было в Морровинде, скачиваешь новый файл со своим медиа, к примеру остров, он появляется в игре. Или, грубо, тачки реализованы в виде отдельных файлов, не просто набор поликов и текстур, а полноценный механизм, то есть кусок програмного кода. Закинул файл в нужную папку - новая тачка появилась в игре. Или расширение функций перса, ну к примеру летающий ранец - как отдельный файл, найти его в игре можно только если этот файл лежит в определённой папке, но без него перс в принципе не летает.
Возлагал надежды на Include filename$ но он даже по условию не работает. Как я это ваще вижу: некая функция сканирует определённую директорию на наличие там определённых файлов. Появился новый файл - кусок кода, и функция встраивает этот кусок в тело программы, видимо в основной цикл или... не знаю вобщем. И всё, и вот в игре появились птицы, или по небу кроме солнца побежала ещё и луна со всей реальной периодичностью. Или периодически стали происходить землетрясения, или помимо гоночных тачек появился эксковатор. Такая вот загогулина... Это вообще возможно силами одного Блица сделать? Доп. условие в том что ничего кроме бейсика я не знаю, ни в С++, ни в паскаль лезть не хотелось бы.
Заранее всем благодарен.
__________________
Изобретаю велосипеды, наступаю на старые грабли, хожу нехоженными тропами
|
(Offline)
|
|
23.02.2012, 21:27
|
#2
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Плагины реализуются через загрузки внешних библиотек. Которые должны реализовывать определенный интерфейс, благодаря которому возможны вызовы заранее не известного кода.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.02.2012, 22:05
|
#3
|
Бывалый
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений (для 110 пользователей)
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
вроде есть луа под блицем - гугли
|
(Offline)
|
|
23.02.2012, 23:16
|
#4
|
AnyKey`щик
Регистрация: 27.08.2009
Сообщений: 7
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Э-м-м-м... Ну а вот такой ход, что скажете: основная прога сканирует директорию, находит новый файл .exe, дале ExecFile( file$ ) и постоянно слушает определённый порт. Вторая прога по тому самому порту по протоколу ТСР дует данные, координаты вертексов, текстуры, анимацию и т.д. При этом слушает порт-ответку основной проги, при чём внешне это выглядит как работа "демона", то есть никак, прога себя не проявляет вообще, просто вычисляет и дует в порт данные. Эдакое подобие клиент-серверной связки наоборот. А первая прога работает с 3D, визуализирует, управляет вычислениями второй, и в конце даёт команду на самозакрытие. Сойдёт за плагин?
__________________
Изобретаю велосипеды, наступаю на старые грабли, хожу нехоженными тропами
|
(Offline)
|
|
23.02.2012, 23:19
|
#5
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Это не плагин. Плагин это дополнительная библиотека, подключаемая по заранее согласованному интерфейсу. Программа работает с ней как со своими собственными функциями.
__________________
|
(Offline)
|
|
23.02.2012, 23:54
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
Небольшое описание что в моём представлении может быть плагином:
Предположим есть приложение, редактор уровней. Само приложение имеет открытый API - набор функций, которые в плагинах можно использовать. Например через эти функции можно получить доступ к определённому объекту в мире, его параметрам, и манипулировать им (ну это самые простые примеры). Также API имеет интерфейс по работе с GUI редактора (создавать окошки, кнопочки и т.п.).
Далее этот API доступен в виде библиотеки.
Каждый плагин имеет две функции Load и Unload.
При включении приложения (или другом событии), для каждого плагина вызывается Load функция, и при закрытии Unload соответственно.
Далее пример плагина - чтобы имел кнопку с удалением всех объектов определённого типа. В функции Load мы создаём панельку, и пихаем её куданить в редакторе, это проделываем через GUI API предоставленным редактором. Далее пишем уже логику для своего созданного GUI, в нашем случае одна кнопка, при нажатии на которую, используя API, мы найдём все объекты например типа "персонаж", и удалим их снова используя API.
Получается что подключая этот плагин, он создаст панельку с кнопкой, которая будет удалять определённого типа объекты со сцены мира в редакторе.
Пример простейший. Но думаю понятен достаточно.
Говоря о Blitz3D, не заморачивайся. Я рекомендую даже и не пытаться начинать что-то делать такого рода на блице - ты потратишь в пустую кучу времени, а результат если и будет, то весьма скудный.
Такие вещи проще делать на OOP языках, напримерв .Net такое сделать вообще сказка, и намного сложнее, хотя бы основываясь возможности использования объектов между ассемблями (библиотека содержит не тупо список функций, а полноценные классы и т.п.), также есть рефлекция - это для плагинов ваще сказка.
В общем, на Blitz3D, не советую заморачиваться о таких вещах, он убог.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
12.06.2012, 14:07
|
#7
|
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
На блитце сделать поддержку плагинов - очень даже можно. Смотри в сторону функции CallDLL.
Ну а так, я считаю более универсальным способом плагиностроя - это подгрузка скриптов. Например нечто похожее есть в 3DMax под названием MaxScript, но Lua ИМХО - лучше, в нем есть оператор require который позволяет динамически перегрузитиь скрипт, все изменения в скрипте немедленно вступают в силу.
Последний раз редактировалось Черный крыс, 12.06.2012 в 19:37.
|
|
|
Сообщение было полезно следующим пользователям:
|
|
28.11.2012, 04:49
|
#8
|
Оператор ЭВМ
Регистрация: 09.05.2009
Адрес: Киев, Украина
Сообщений: 45
Написано 6 полезных сообщений (для 25 пользователей)
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
В Blitz3D не имеет смысла открытая архитектура - это имхо - извращение, и ничего не даст - в древности сам этим заморачивался но понял пототом, что у каждого языка свое назначение, время и возможности.
|
(Offline)
|
|
16.12.2012, 12:58
|
#9
|
|
Ответ: Как реализовать открытую архитектуру? (плагины, расширения и т.п.)
При включении приложения (или другом событии), для каждого плагина вызывается Load функция, и при закрытии Unload соответственно.
|
AttachProcess() \ DetachProcess()
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:57.
|