Архитектурные подходы к созданию игрового меню / оболочки на ПК / Linux?


8

Я работаю над коллекцией игр для индивидуальной настольной цифровой установки (аналогично таблицам Microsoft Surface). Каждая игра будет отдельным исполняемым файлом, который работает в полноэкранном режиме. Кроме того, одновременно должна быть запущена программа наложения меню / оболочки. Меню / оболочка позволит пользователям приостанавливать игры, переключаться на другие игры, проверять их историю игр и т. Д.

Некоторые ключевые требования оболочки:

  • он перехватывает весь пользовательский ввод (в основном мультитач) перед передачей его текущей запущенной игре (так что он может знать, например, всплывающую команду «пауза»);

  • может отображаться на произвольных участках экрана, при этом текущая (но, по-видимому, приостановленная) игра по-прежнему отображается снизу, в идеале с динамической формой / размером, что позволяет создать анимированный эффект выдвижного ящика в игре.

В настоящее время я изучаю различные архитектурные подходы к этой проблеме, включая наложения Fraps и DirectX, но я уверен, что мне не хватает некоторых способов обдумать это. Какие основные подходы я должен рассмотреть?

(Обратите внимание, что таблица в настоящее время работает на ПК с Windows, но потенциально она может представлять собой Linux-систему. Под этим я не подразумеваю, что мне нужно решение, не зависящее от ОС. Я был бы доволен решением для Windows. Я хотел бы рассмотреть вопрос о переходе на Linux и использовании решения, ориентированного на Linux, если это будет намного проще сделать в Linux.)

Ответы:


3

Я не думаю, что есть что оценивать, правда. Производительность / отзывчивость на первом месте, особенно при установке такого рода. Вы можете использовать DirectX или OpenGL отложенный рендеринг / рендеринг в текстуру (RTT).

Для этого визуализируем подкладку оболочки в буфер кадров по умолчанию (передний / экранный буфер), визуализируем наложение вашей активной игры в квадратор размером с экран, перемещаем этот квад в соответствующую позицию в мировом пространстве в соответствии с текущим статусом «выдвижного ящика». msgstr "переходите, а затем визуализируйте его в буфер кадра по умолчанию. Теперь у вас должна быть активная игра, наложенная поверх оболочки, и это очень быстрая операция, и, следовательно, она поддается плавным переходам (учитывая некоторую математическую интерполяцию).

Взаимодействия, вы даже можете сделать пиксельное обнаружение попадания под / оверлей идеальным, если вы будете считывать данные RTT на стороне ЦП для каждого кадра. В этом случае вам нужно будет вернуть хотя бы оверлейный буфер как дешевый RTT с 1-битной маской.

РЕДАКТИРОВАТЬ Другой способ - полностью использовать браузер, так как вы можете использовать полноэкранный режим. Вы можете загружать игры как модули, а не иметь отдельные «программы». Проблема с браузером в том, что вы не получите ту же производительность. Вы все еще могли бы использовать WebGL (так как у вас был бы контроль над тем, какой браузер вы бы использовали) для многоуровневой и быстрой графики, но игры должны были быть простыми. Помимо производительности, этот способ может быть немного проще для разработки, но все еще не зависит от ОС.


Дайте мне знать, если у вас есть какие-либо вопросы;)
Инженер

Спасибо! И просто чтобы проверить, будет ли этот подход работать с оболочкой и отдельными играми, запущенными как отдельные программы?
Ghopper21

Нет. Так или иначе, один и только один процесс сможет получить доступ к контексту устройства GPU. Единственный способ увидеть, как вы делаете это иначе, - отказаться от 3D-ускорения вместе, что я бы не советовал. Другое дело так: если вы еще не уверены, будете ли вы выигрывать Уин или Лин, с этим подходом все в порядке. Принимая во внимание, что если вы выберете какой-нибудь подход, специфичный для ОС, затем перейдите на другую ОС, что может сделать первый подход устаревшим и, возможно, даже не воспроизводимым на вновь выбранной ОС. Я предлагаю ждать дальнейших ответов / идей.
инженер

@ Ghopper21 Смотрите мои изменения для другого курса.
инженер

Спасибо Ник за браузерное решение. Я думаю, что хочу избежать этого из-за производительности и других проблем. Но из твоей заметки я понимаю, что мне было неясно, что такое Windows и Linux. Я уточню в редактировании к вопросу.
Ghopper21
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.