воспроизведение игры в окне редактора движка
| |
afq | Дата: Суббота, 21 Июля 2018, 00:05 | Сообщение # 1 |
Разработчик
Сейчас нет на сайте
| Как так делают? Видел в unity, что в редакторе можно запустить проект игры и играть в самом редакторе, то же самое видел и unreal engine, как такое можно сделать, не пойму?
|
|
| |
GC-Vic | Дата: Суббота, 21 Июля 2018, 00:32 | Сообщение # 2 |
GcUp.ru
Сейчас на сайте
| В твоём движке?
Закон Мерфи: "Если вы уверены, что ваш поступок встретит всеобщее одобрение, кому-то он обязательно не понравится".
|
|
| |
afq | Дата: Суббота, 21 Июля 2018, 00:35 | Сообщение # 3 |
Разработчик
Сейчас нет на сайте
| GC-Vic, ну моё пока ещё трудно назвать движок, но я бы хотел узнать как вообще такое делают. Как такое возможно вообще, не могу представить. Например я на qt буду делать движок. Но варианты не обязательно должны быть на qt. какие вообще способы есть?
|
|
| |
DivES | Дата: Суббота, 21 Июля 2018, 01:47 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| afq, ну, например, в Blender и его Blender Game Engine - всё точно такое же. То есть мы можем прямо из Blender`а запустить игру. А так как этот пакет позволяет моделировать, расставлять предметы на сцене и наносить текстуры, то это очень удобно! Взял, создал сцену - поиграл на ней; не понравилось? Тут же поменял расположение объектов - поиграл ещё.
Теперь по вопросу: Не знаю, как реализовано в тех движках, которые ты привёл, но в Blender есть "blenderplayer" - приложение, которое и воспроизводит сцены в формате .blend (файлы, которые сохраняет Blender). Так, может быть, в Unity или UE реализовано так же?
К вопросу о том, как реализовать тебе: Конечно, представить это легко, а вот реализовать - сложно. Требуется быть хорошим программистом. Но раз уж ты захотел написать свой движок, то это требование первостепенно! Сделай подобный "afqcoolplayer", который мог бы открывать файлы формата ".afq", допустим. Допустим, ты создал способ сохранения созданной тобою сцены в этот формат. Допустим, ты можешь "проигрывать" файлы этого формата своим плеером (это означает, что плеер может обрабатывать события, которые ты задашь в сцене). Теперь дело за "малым": в редакторе своего конструктора, при нажатии на Play происходит сохранение временного файла в твой формат и в окне этого же редактора запускается проигрыватель, на вход которого поступает этот временный файл!
Рассказал свой вариант, тебе всего лишь нужно это запрограммировать
|
|
| |
afq | Дата: Суббота, 21 Июля 2018, 01:49 | Сообщение # 5 |
Разработчик
Сейчас нет на сайте
| DivES, ага, а это интересно, может так и есть в других движках. Чтож буду иметь ввиду, спасибо.
|
|
| |
GC-Vic | Дата: Суббота, 21 Июля 2018, 09:26 | Сообщение # 6 |
GcUp.ru
Сейчас на сайте
| Да, это просто встроенный плеер в IDE. Ты же не спрашиваешь, как это в него встроены редактор кода, менеджер ресурсов и пр. Я думаю, Windows без разницы, где отображать вывод - оконный режим, а как там расположено это окно не имеет значения.
Закон Мерфи: "Если вы уверены, что ваш поступок встретит всеобщее одобрение, кому-то он обязательно не понравится".
|
|
| |
martuk | Дата: Суббота, 21 Июля 2018, 11:48 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| afq, я такое на love2d делал. Вполне простенький конструктор на lua экспортировал в код на .lua и его же инклудил. Основной код программы был изолирован от игрового и все игралось будто в отдельном окне. После остановки просто удалял переменную в которую был вгружен класс игры и коллектом чистил память.
|
|
| |
afq | Дата: Суббота, 21 Июля 2018, 14:02 | Сообщение # 8 |
Разработчик
Сейчас нет на сайте
| GC-Vic, martuk, DivES, а что если это не плеер, ну к примеру вот о чём подумал. Но назовём его плеером, чтобы было понятней о чём я пишу. В плеере есть такой код, получить указатель на библиотеку динамическую и выполнить код. А код проекта, если надо проверить как работает игра в игровом редакторе, то вся игра компилируется в библиотеку. Может так получиться?
|
|
| |
DivES | Дата: Суббота, 21 Июля 2018, 17:26 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| afq, ну если есть возможность скомпилировать всю игру в библиотеку и после этого всего лишь подключить её, то да, почему бы и нет. Получается всё то же самое, что и с сохранением временного файла. Только в данном случае - это библиотека! Но, это если я правильно понял твои мысли
Просто ты слишком абстрактно написал. Вот так сразу и не скажешь, можно ли такое реализовать
Сообщение отредактировал DivES - Суббота, 21 Июля 2018, 17:39 |
|
| |
afq | Дата: Суббота, 21 Июля 2018, 20:52 | Сообщение # 10 |
Разработчик
Сейчас нет на сайте
| DivES, да я пока ещё не пробывал такое. Но программу можно компилировать вроде бы без библиотеки, а в самой программе уже искать нужную версию библиотеки, то есть нашей. И всё. Да должно получиться, я надеюсь на это. Потом отпишусь как сделаю это, будешь знать. Потом вдруг сам захочешь делать такой на с++ или си, и уже будешь знать что можно в библиотеке игру сделать и подсоединить к редактору, и выполнить нужную функцию. Добавлено (22 Июля 2018, 01:52) --------------------------------------------- DivES, что-то пока не получается в qt. Попробую ещё в gtk, но нужно бы на qt чтобы с++ было. Добавлено (22 Июля 2018, 01:53) --------------------------------------------- DivES, есть функция void (*loop)(); она получает ссылку на функцию с помощью dlsym, но она не получает её, потому что если сделать такую проверку, то ничего не будет.
Если выполнить эту функцию без проверки, то вся программа завершиться с ошибкой.
|
|
| |
BADCOIQ | Дата: Воскресенье, 22 Июля 2018, 02:27 | Сообщение # 11 |
Отец-основатель BADCOIQ Corporation © 2010
Сейчас нет на сайте
| Цитата afq ( ) Как так делают? Видел в unity, что в редакторе можно запустить проект игры и играть в самом редакторе, то же самое видел и unreal engine, как такое можно сделать, не пойму?
Представь, в редакторе, есть камера, через которую человек видит виртуальный мир. Есть другие объекты на сцене, дорога, стена. У всех объектов есть параметры, позиция, физические параметры. Что мешает сделать кнопку, по нажатии на которую, инициализировался бы физический движок, активировалась нужная камера, включались бы нужные кнопки ввода? Все данные о виртуальном мире сохраняются, скрипты доступны и они как бы переходят в рабочий режим.
Если часть игры вынесена в другие модули (.dll .so), то для правильной работы создают общие методы, интерфейсы. А значит, каждый модуль должен реализовывать их (например, инициализация, завершение работы).
Цитата afq ( ) DivES, есть функция void (*loop)(); она получает ссылку на функцию с помощью dlsym, но она не получает её, потому что если сделать такую проверку, то ничего не будет.
При загрузки библиотеки нужно проверить, загружена ли она. Если загружена то Указатель должен быть инициализирован нулём или nullptr. Если получить адрес на функцию не удалось, то указатель так и останется нулевым. Значит, была допущена ошибка либо при экспорте функции, либо при получении указателя на неё (ошибка в имени, ошибка в объявлении указателя).
При загрузки библиотеки лучше сразу проверить на наличие все функции. Если какой-то нет то ошибка, старая .dll .so. Если всё есть, то проверки можно убрать, или использовать какой-нибудь флаг (библиотека была загружена или нет).
"Do you think we can fly? Well, I do."
|
|
| |
|