ria pc game
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
18 февраля 2019 5:22
Вход Регистрация Забыли пароль ?

megainformatic - Использование cron, crontab и планировщика задач
Использование cron, crontab и планировщика задач Доброго времени суток ! В данной статье я хочу поделиться с вами дорогие читатели, опытом использования ПЛАНИРОВЩИКА ЗАДАЧ (он же cron, он же crontab). Во-первых, зачем нужен cron ? Планировщик задач позволяет вам выполнять нужные Вам программы на хостинге в заданное время и без в
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Что нужно знать для создания сайта ? Содержание

megainformatic - Что нужно знать для создания сайта ? css - стили

megainformatic - preg_match или Использование регулярных выражений в php

megainformatic - статьи Тимонина Андрея - Flash. Содержание

megainformatic - статья Тимонина Андрея - Flash. Подготовка к работе.

megainformatic - статья Тимонина Андрея - Flash. Hello world.

megainformatic - статья Тимонина Андрея - Flash. Экспорт SWC библиотеки.

megainformatic - Тимонин Андрей - Несколько слов о себе

megainformatic - статьи Тимонина Андрея - уроки из области веб программирования, создания казуальных игр

megainformatic - статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

megainformatic - статья Тимонина Андрея - Хронология работы программы. Создаем Лог

megainformatic - статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

megainformatic - статья Тимонина Андрея - Исключения. Создаем класс обработки исключений.

megainformatic - статья Тимонина Андрея - States. Создаем менеджер состояний игры.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 1. Создаем страничку регистрации на сайте.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 2. Создаем обработчик, и заносим информацию о пользователе в Б.Д.

megainformatic - статья Тимонина Андрея - Таймер. Выводим время игры.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем основной класс обработки графики.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем первое приложение.

megainformatic - Что нужно знать для создания сайта ? float - использование в css - стилях

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 2 - пишем свою композицию COLD

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 3 - экспериментируем с композицией COLD

megainformatic - Что нужно знать для создания сайта ? Стандартные шрифты для сайта

megainformatic - Что нужно знать для создания сайта ? ASC II Коды символов

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 4 - пишем первый вариант композиции COLD

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. СОДЕРЖАНИЕ

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. Энергетический кокон

megainformatic - Модуль галерей для любой cms

megainformatic - Портфолио выполненных проектов сайтов и приложений

megainformatic - Мои Музыкальные Миры - страница 2

megainformatic - megainformatic cms rs

megainformatic - модуль Падающий снег

megainformatic - проект Open Shop

megainformatic - Рисуем красивую девушку всего за 6 шагов

megainformatic - Галерея красивых рисованных девушек

megainformatic - НОВОГОДНЕЕ ОБРАЩЕНИЕ СОЗДАТЕЛЯ webinformatic К ЖИТЕЛЯМ ПЛАНЕТЫ интернет

megainformatic - Отзывы оставленные пользователями как впечатление о проделанной работе или что-либо понравившееся на сайте

megainformatic - Уроки css - атрибут position

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - СОДЕРЖАНИЕ

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - Глава 1 - Обычный день

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - Глава 2 - Начало (begin)

Новогодняя дискотека 2013 на megainformatic точка ru

megainformatic - Программируем на C++ с использованием MFC

megainformatic - Программируем на C++ с использованием MFC - Создание MFC приложения

megainformatic - Программируем на C++ с использованием MFC - Создание MFC приложения - hello, world !

megainformatic - Как создать игру ? - Пишем игровой движок с нуля

megainformatic - Как создать игру ? - Пишем игровой движок с нуля - Вступление

megainformatic - Как создать игру ? - Пишем игровой движок с нуля - Общая структура будущего игрового движка

Разное

megainformatic - Как создать игру ? - Пишем игровой движок с нуля - DXUTMainLoop - цикл работы DirectX-приложения

megainformatic - Варианты макетов Психолог 911

megainformatic - Шаблоны для сайтов - что это и какие они бывают ?

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - Глава 3 - Кто он ? (who is ?)

megainformatic - Мои Музыкальные Миры - готовая музыка mp3 - новинки 2013 года

megainformatic - Теория и практика хакерских атак - самозащита от нападения

megainformatic - Теория и практика хакерских атак - самозащита от нападения - Способы подмены реального IP

подробнее

     
 

Видео урок про создание игры - рождение игры часть 1.

Если начать изучение основ с элементарных, то постичь секреты создания игр в delphi 7 для directx 8.1 api доступно каждому.

 
     
 
Урок 6 Игровая логика
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 1] [далее] [к содержанию]
 

Игровая логика - это формализованный в коде набор игровых идей, которые составляют игровой геймплей.

В игре "Ну, Погоди!" игровая логика сводится к следующему алгоритму, выраженному в словесной форме -

игрок должен управлять положением волка, располагая его в одном из 4х возможных. С лотков катятся яйца. По достижении конца лотка яйца падают, если у этого лотка не стоял волк, при этом выглядывающий из окошка заяц вызывает появление из разбитого яйца бегущего цыпленка. Отсутствие зайца приводит к полному разбиванию яйца. За пойманные яйца начисляются призовые очки, за разбитые - штрафные. Бегущему цыпленку соответствует пол-штрафного очка, полностью разбитому яйцу - 1 штрафное очко. Игра продолжается до 3 штрафных очков или до троекратного набора 999 очков. В последнем случае отображается поздравительный текст и небольшой мультфильм.

 

Теперь посмотрим на код, который должен реализовать описанную логику -

в методе TD3DGameApp.UpdateInput

изменение положения волка происходит следующим образом

{...}

if PressButton in m_DXInput.States
then begin
Area := TargetBtnArea(GetCursorPos);
//в данном случае проверяется нажатие на кнопку управления волком на игровой

//панели путем наведения на неё указателя мыши и нажатия левой кнопки мыши

{...}

if LeftUpCatch in m_DXInput.States then begin //т. к. на больших скоростях игры потребуется прямое управление
Area := 0;
//волком от клавиатуры, то это происходит таким образом
end;

{...}

Далее текущее положение волка заносится в специальную переменную -

Это происходит в реализации метода TD3DGameApp.FrameMoveGameSituation -

//положение волка
if (Area >= 0) and (Area < 4) then begin
WolfPos := 1 + Area;
WolfPosSet := WolfPosSet + [WolfPos];
end;

и далее -

//если игра не остановлена из-за разбитого яйца
if not StopGame then begin

//появление нового яйца на лотке
CreateNewEgg;

//качение яиц по лоткам
RollEggs;

//появление зайца из окошка
RabbitLookedFrom;

//счетчик изменения темпа игры
IncreaseGameSpeed;


end; {of StopGame or ResetShtraf}

CrashEggs; //разбивание яиц, бег цыплят


//мерцание, сброс штрафных очков

FlashShtraf;

 

Реализацию показанных методов Вы можете посмотреть в исходном коде игре "Ну, Погоди!".

Как видим игровая логика тесно взаимосвязана, с тем, что происходит на экране и собственно для этого и предназначена - управлять игровым процессом. Значит реализовав игровой процесс мы тем самым создаем игровую логику нашей игры.

 
Переходим к практическим упражнениям.
 

Используя код приложения из предыдущего - 5 урока - GameClasses_src попробуйте реализовать такой простейший игровой процесс:

на экране выводится какая-либо картинка, поверх ее игровой курсор в виде прицела, перемещая указатель мыши мы тем самым перемещаем прицел, левая кнопка вызывает выстрелы, при этом капли жидкости попадают на картинку

 
В законченном виде это уже реализовано в проекте "В плену желаний". Можете скачать и посмотреть, но обязательно попробуйте реализовать это сами в качестве практики.
 
плен желаний
 

В ходе реализации плена желаний я разрешил одну логическую ошибку, в результате которой код, отвечающий за формирование рельефа и перемещение по нему персонажа из примера 3D-игры Scene2Game будет работать корректно. Это полноценный пример по построению сложной игровой 3d-сцены с анимированными персонажами, игровыми панелями и прочими атрибутами. Пример также способен отображать рельеф и перемещать персонажей по нему, но для этого его немного надо доработать. Можете попробовать сами.

Для компиляции примера понадобится библиотека delphi directx.

 
Пример сложной игровой сцены
 

Особенности примера:

- вывод 9 зон земной поверхности и объектов на ней (деревья), возможно построение сцены по данным файла - карты;

- свободная и привязанная к персонажу камера (переключение клавишей [V]);

- переключение между персонажами [пробел];

- анимированные персонажи (хотьба, прыжки, падение); управление персонажем j, k, l, i

- игровые панели - жизни, сила броска;

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

- поиск ближайших кубиков, показ их стрелками;

- рассчет траекторий полета (не доделано);

 

В завершение данного урока хотелось бы обратить Ваше внимание на реализацию алгоритма постепенного нарастания темпа в игре "Ну, Погоди!". Для этого загляните в реализацию метода TD3DGameApp.IncreaseGameSpeed

разобравшись с тем, как он работает, а также учтя тот важный момент, который применяется для того, чтобы игрок сумел поймать катящиеся яйца со всех лотков, Вы возможно сможете предложить собственный вариант его реализации, еще более близкий к реальной электронной игре "Ну, Погоди!"

 
 
 
[назад] [страница 1] [далее] [к содержанию]
 
     
     
     
     
подробнее

     
  Путешествие в мир 3d  
     
  [содержание] [назад] [страница 6] [далее]  
     
 
 
В данном уроке - Путешествие в мир 3d мы попробуем создать небольшую сцену, включающую земной холмистый рельеф, небесный фон, деревья, траву, участок железной дороги и товарный вагон В данном уроке - Путешествие в мир 3d мы попробуем создать небольшую сцену, включающую земной холмистый рельеф, небесный фон, деревья, траву, участок железной дороги и товарный вагон - щелкнув по изображению можно загрузить полномасштабный вариант
 
Для нашей работы мы будем использовать 3ds max 7.0 и photoshop cs2, если у Вас версии выше или ниже - ничего страшного. Никаких особых изменений Вы скорее всего не обнаружите, ну а уж если обнаружите - пишите вопрос мне или на форум
 
 
Железная дорога и товарный вагон
 
 
 
Железная дорога включает следующие элементы - насыпь, шпалы и рельсы
 
 
насыпь - это просто плоскость, которая была чуть искривлена смещением вершин. Вершины выделяются методом мягкого выделения (Soft Selection)
 
 
С последующим смещением на нужное расстояние, затем к созданной модели применяется материал с текстурой.
 
 
Рельсы и шпалы - обычные боксы требуемых размеров, с нанесением текстуры
 
 
Если хотите, можете сделать рельсы и профильными, как сделал это я, догадаетесь как ? Задавайте вопросы.
 
 
Вагон - это набор боксов и цилиндров. 8 цилиндров - это модели колес с нанесенной текстурой. Колеса расположены около боксов имитирующих колесные опоры. Каркас вагона - это два одинаковых бокса, один с внешними гранями и одной удаленной стенкой, другой с внутренними гранями - имитирующий вид изнутри. Вагон и его элементы текстурированы с использованием модификатора Unwrap UVW. Описание работы с этим модификатором смотрите в уроке - Создание текстурной развертки для модели автомобиля
 
 
 
Я не надеюсь на то, что Вы 100% усвоили то, что здесь описано, настоящее знание приходит с практикой, поэтому я помимо всего описанного и чтобы не быть голословным выложил модель и все текстуры готовой сцены, которую мы описывали на протяжении шести страниц данного урока - скачать модель и все текстуры -
 
скачать модель сцены и все текстуры - холмистая равнина, небо, флора, железная дорога и вагон
 

[downloads:4]
 
для распаковки архива Вам потребуется WinRar 3.3 или выше. Модель в формате 3ds max 7.0
 
     
     
     
  [содержание] [назад] [страница 6] [далее]  
     
     
подробнее

Платная подписка на simple game fle game engine версия 1.0.7 от 05.01.2017



Вы можете прямо сейчас оформить платную подписку на fle game engine -



Платная подписка на simple game fle game engine версия 1.0.7 от 05.01.2017


Стоимость: 600 руб.

новый современный движок для создания игр на платформе Windows Directx 9c - которая поддерживается большинством ПК.

Прежде чем оформлять платную подписку Вы можете - ознакомиться с уроками, скачать бесплатные версии утилит, входящих в состав fle game engine.

Приобретая simple game fle game engine версия 1.0.7 от 05.01.2017 Вы получаете:

- полный исходный код игры simple game доступный для модификаций и дальнейшего расширения, на нём можно также создать любую другую игру.

- исходный код включает следующие реализованные функциональные особенности:

- работу с 2d спрайтами;

- загрузку произвольных игровых 2d сцен с произвольным набором игровых объектов, созданных в Scene Editor fge;

- знакомство с позиционированием игровых объектов в векторной системе координат;

- самостоятельное перемещение игровых объектов в сцене и скроллинг игровой сцены;

- оформление обложки игры для игрового экрана, ограничение перемещений;

- реализация проверки столкновений на примере попадания прыгающего шарика в одну из ям игровой сцены;

- начисление и показ набранных очков;

- воспроизведение в игре звуков, привязанных к определенным событиям, mp3 музыки;

- создание новых игровых сцен, дальнейшее расширение и совершенствование игры;



Также вы получаете:

- свежую версию редактора сцен Scene Editor fge - на данный момент версия 1.0.2,

Создание игры во fle game engine - Scene Editor fge 1.0.2 - пример изометрической сцены из проекта игры Веселый Буквоежка

которая поддерживает создание 2d сцен по сетке,
со скроллингом по горизонтали и вертикали. Возможно создание как плоских, так и изометрических сцен любых мыслимых конфигураций.

Редактор Scene Editor fge поддерживает целый ряд настроек, включающих:

- размеры и цвет ячейки сетки;
- настраиваемый набор игровых ресурсов, которые будут использоваться в вашей игре;
- выравнивание по сетке и без него;
- настраиваемый цвет фона, информационных надписей, вид сетки (полный или сегментный);
- размер игровой сцены в блоках по ширине и высоте;
- автоматический рассчёт координаты Z;
и некоторые другие.





- Бесплатная версия утилиты Coords2D;



  Скачать Coords2D -

Coords2D утилита тестирования спрайтов и определения экранных координат в 2d сценах fle game engine


Размер sfx-архива: 36 Mb. Также содержит много примеров спрайтов и других
изображений из проекта fle, bol и др.

Подробнее





fle game generator - fly snow 3d падающий снег версия 1.0.3.1 от 13.12.2016

fle game generator - fly snow 3d падающий снег версия 1.0.3.1 от 13.12.2016 - расширяемый генератор визуальных образов

подробнее о fle game generator - fly snow 3d падающий снег версия 1.0.3.1 от 13.12.2016

Данная программа позволит создавать различные 2d/3d эффекты. В скором времени появится поддержка создания во fle game engine 3d игр и приложений. Соответственно будет расширен редактор Scene Editor fge.





Набор уроков Шарики на лифте - Как создать игру

Шарики на лифте





подробнее



Набор уроков и примеров с исходным кодом для fle game engine по созданию игр для Windows DirectX 9c на c++ в среде разработки MSVS 2005.

Набор уроков и примеров с исходным кодом для fle game engine по созданию игр для Windows DirectX 9c на c++ в среде разработки MSVS 2005





Список уроков:

КАК СОЗДАТЬ СВОЮ ИГРУ - Веселый Буквоежка Ваше Визуальное Шоу / Fun Letter Eater You Visual Show

КАК СОЗДАТЬ СВОЮ ИГРУ - Набор разработчика игр - Нечто: Необъяснимое - в плену желаний

Как создать игру ? - Программируем сами.

Vertices - Вершины

Уроки Photoshop - Чудеса. Коллаж от нуля

Уроки Photoshop

Уроки Photoshop - Рисуем волка из мультфильма

Создаем анимацию хотьбы волка в Photoshop и ImageReady

Введение в 2d-игры - создаем заставку для игры

Введение в 2d-игры - анимация и движение героя

Уроки Photoshop - Рисуем и анимируем

DirectX 9c - Изучаем пример MultAnimation

Основы работы в Microsoft Visual Studio 2008 и DirectX 9 (DX SDK Aug 2008)

Введение в программирование игр на С++ для платформы DirectX 9

Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2)

Основы 3D-анимации, экспорт скелетной анимации

Путешествие в мир 3d

игра "Веселый Буквоежка" - инструменты разработки

Как анимировать паука ?

Game craft - моделируем scv

комплект игра Шарики на лифте + Как создать игру

fle game engine Simple game / Пример простой игры - страница 1 - Спрайты

Здесь приведен лишь краткий перечень уроков.

Все уроки можно найти используя карту сайта

Они посвящены самым разнообразым темам - созданию графики, программированию, созданию звуков и музыки и другим интересным темам так или иначе связанным с созданием игр и сайтов.





Примеры игр и приложений, которые уже созданы на движке fle game engine

Игра road2 city / Дорога в Город freeware + source.

Игра road2 city / Дорога в Город freeware + source


Это самая первая игра написанная еще на delphi 7. Тогда еще не было движка fle game engine, но были заложены первые его основы.





Donuts 3D freeware + source.

Donuts 3D freeware + source


Это пример игры из Directx SDK 8, переписан на delphi 7. Первый пример 3d игры на delphi для будущего движка fle game engine.





Эмулятор электронной игры Электроника ИМ-02 "Ну, Погоди!", версия 1.10 распространяется платно.

Эмулятор электронной игры Электроника ИМ-02


2d Игра на delphi 7 directx 8.1 / msvs 2005 c++ directx 9c. Первая полноценная игра, написанная сразу на двух языках - сначала delphi 7, а затем c++. Также обновилась и платформа - сначала игра была для directx 8, а затем была создана новая обновленная версия для directx 9c.





Нечто Необъяснимое - пре релиз freeware.

Нечто Необъяснимое - пре релиз freeware


Игра на delphi 7 directx 8.1 содержит в себе элементы как 3d, так и 2d - заложила многие основы будущего движка fge. К сожалению проект не был доведен до логического завершения. Но он послужил хорошей основой развития многих особенностей.





Нечто Необъяснимое: в плену желаний freeware.

Нечто Необъяснимое: в плену желаний freeware


Игра на delphi 7 directx 8.1 2d. Это первая полноценная игра, выпущенная на fge в delphi. Содержит основы "одевалок" - игр для девочек, которые сейчас очень популярны в определенных кругах. Во время своего создания таких жанров игр и вообще таких игр не было - она была пионером в своём жанре. Также содержит возможность создавать собственные дополнения без программирования.





Веселый Буквоежка shareware.

Веселый Буквоежка shareware


изометрическая 2d игра на msvs 2005 c++ directx 9c. Самый крупный проект - разрабатывался на протяжении нескольких лет. Составляет основу движка fge. Также пока логически не завершен. Но реализовано очень многое в плане полезности для создания игр и основ игрового движка. Это и Scene Editor - редактор карт, и утилита Coords 2D - для отладки экранных координат,

В самой игре реализованы: аркадный режим и основы создания аркадных игр, режим приключения и основы создания квестов, смена погоды (дождь/ясно), поиск предметов и основы создания игр на поиск предметов, инновационные идеи и их вариации - смесь жанров.

Содержит в себе идеи таких игр, которых в то время еще не было - всем известные Зомби Против Растений - это прообраз аркадного режима когда героя атакуют пауки.

Веселая ферма - режим когда Буквоежка занимается посадкой саженцов деревьев и уходом за ними.

Игры в жанре квест - Петька и Василий Иванович Чапаев. На момент создания игры уже существовала 5 или 6 версия данной игры.

Многие аркадные игры - такие как Супер Марио, Braid и др.

Таким образом проект вобрал в себя многие идеи, которые опередили своё время, а позже были реализованы в других проектах и совсем другими авторами, независимо.



серия комиксов о Косте Коробкине - распространяется платно.

серия комиксов о Косте Коробкине - распространяется платно


2d приложение для directx 9c. Распространяется платно. На данный момент выпущено 4 части. 4 часть разбита на 2 подчасти. 1 уже выпущена. 2 близится к завершению.

Комиксы про Костю Коробкина доступны для чтения онлайн, и в виде приложений для Windows DirectX 9c. Повествование сопровождает музыка. Есть возможность останавливать воспроизведение, увеличивать страницы и др. возможности. Можно также создавать свои комиксы и приложения для их показа.



игра Шарики на лифте Серия 1 Разгони Лифт / Balls on Lift Level 1 Run The Lift версия 0.9.2 05.10.2016 / version 0.9.2 05.10.2016 freeware / shareware.

игра Шарики на лифте Серия 1 Разгони Лифт / Balls on Lift Level 1 Run The Lift версия 0.9.2 05.10.2016 / version 0.9.2 05.10.2016 freeware / shareware


2d игра directx 9c. Акрада. Распространяется бесплатно и условно-бесплатно. Создан целый комплект уроков для создания модификаций и дополнений игры Balls on Lift с программированием (в разработке) и без него - Шарики на лифте - Как создать игру.





подробнее

     
 

Видео урок посвященный созданию игры Ну, Погоди ! - рождение игры часть 3.

Покажет Вам простейшую элементарную игру и особенности её создания в delphi 7 на directx 8.1 api.

 
     
 
Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 1] [далее] [к содержанию]
 
 
 

Оконный и полноэкранный режимы работы имеются во всех современных играх написанных и в OpenGL и в DirectX.

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

Оконный режим подходит для небольших, казуальных игр, использующих немного ресурсов и не требующих максимального быстродействия. Однако имейте в виду, что оконный режим - это режим главным образом предназначенный для отладочных целей. Максимально достижимое быстродействие достигается ТОЛЬКО в полноэкранном режиме. Но этот режим не подходит для отладочных целей, т.к. в нём невозможно поймать и отследить все ошибки, кроме того, при некоторых особо фатальных ошибках возврат из этого режима вообще может оказаться невозможным без перезагрузки компьютера.

 
Именно поэтому, пока Вы еще чувствуете, что Ваша игра "сыровата", тестируйте и отлаживайте ее в оконном режиме. Он позволит Вам в особо фатальных случаях просто снимать приложение через диспетчер задач, что в случае полноэкранного режима не всегда может оказаться возможным.
 
 
 

Если Вам ясен весь материал, изложенный в 2х предыдущих уроках, то в общих чертах работа D3D-приложения в оконном режиме Вам тоже должна быть понятна.

Размер рабочей области окна D3D в оконном режиме определяется размерами того окна, чей обработчик (Handle) задан при передаче параметров во время создания объекта IDirect3DDevice8

В этом легко убедиться заглянув в код методов TD3DGameApp.Create_ и TD3DGameApp.CreateDisplayObjects

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

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

В случае оконного режима это может быть обычный пункт меню TMainMenu. В полноэкранном режиме ситуация несколько сложнее - в этом режиме главное меню окна не отображается, именно поэтому для выхода из полноэкранного режима нужно использовать какую-либо клавишу (комбинацию клавиш), причем обрабатываемую средствами DirectInput, можно также использовать игровое меню, реализуемое средствами Direct3D без использования TMainMenu.

О том, как создать и использовать такое меню описано в статье - Создание игрового меню

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

Не вдаваясь в подробности документации по DirectX, которую Вы, надеюсь, найдете и изучите самостоятельно по мере необходимости, DirectInput8 - это более скоростное и эффективное средство опроса устройств ввода - клавиатуры, мыши и других подключаемых устройств (всемозможных джойстиков, рулей и прочего).

Использование DirectInput8 для того, чтобы пользователь мог быстро управлять игрой, а игра быстро реагировать на команды пользователя сводится к следующему -

в пункт uses секции interface нужно подключить модуль DX8_DIUtil8.pas из библиотеки Delphi DirectX 8.1

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

const

ChangeWindowModeKey = isButton1; //константа isButton1 определена в модуле DX8_DIUtil8.pas

в описании класса D3D-приложения (класс TD3DGameApp в нашем случае) добавить поле

m_DXInput: TDXInput; //управление игрой через DirectInput

Также в описании класса нужно добавить несколько новых методов -

// Input functions
procedure SetDefaultDefKeys;
procedure CreateInputObjects;
procedure DestroyInputObjects;
procedure UpdateInput;

 

Далее в секции implementation нужно реализовать код данных методов -

procedure TD3DGameApp.SetDefaultDefKeys;
begin
FCustomKeyAssign := DefineDefaultKeys;
//процедуру DefineDefaultKeys нужно определить как локальную для модуля //главной формы Вашего проекта
end;

в секции интерфейса она записывается как

function DefineDefaultKeys: TKeyAssignList;

а в секции реализации как

function DefineDefaultKeys: TKeyAssignList;
begin
FillChar(Result, SizeOf(Result), 0);

AssignKey(Result, ChangeWindowModeKey, [Ord('W'), VK_F6]); //к данному действию привязываются клавиши W и F6

end;

далее реализуем код оставшихся методов

procedure TD3DGameApp.CreateInputObjects;
begin
SetDefaultDefKeys;
m_DXInput := TDXInput.Create(Self);
end;

procedure TD3DGameApp.DestroyInputObjects;
begin
FreeAndNil(m_DXInput);
end;

procedure TD3DGameApp.UpdateInput;
var
CurrentState: TUserInput;
begin
if not Assigned(m_DXInput) then Exit;

m_DXInput.Update;

if ChangeWindowModeKey in m_DXInput.States then {выполнить нужное действие};

end;

вызов метода CreateInputObjects нужно добавить внутри TD3DGameApp.OneTimeSceneInit

вызов метода DestroyInputObjects нужно добавить внутри TD3DGameApp.FinalCleanup или другом методе освобождения ресурсов, который вызывается из FormDestroy

вызов метода UpdateInput, в котором осуществляется обновление состояния устройств DirectInput и вызов методов обработки тех или иных действий пользователя нужно добавить внутри метода TD3DGameApp.FrameMove

 
Итак, переключение полноэкранного/оконного режимов D3D-приложения будет происходит по действию ChangeWindowModeKey. Данное действие будет вызываться клавишами [W] или [F6]. Можете использовать другие клавиши, если хотите.
 

Остается в строке кода

if ChangeWindowModeKey in m_DXInput.States then {выполнить нужное действие};

комментарий {выполнить нужное действие}

заменить на вызов метода, который бы вызывал фактическое переключение режима приложения из оконного в полноэкранный и обратно.

Таким методом является следующий -

procedure TOptionsMenu.AcceptOptions;
var
ScreenSizeMetric: TScreenSizeMetric;
begin
if g_d3dApp = nil then Exit;
ScreenSizeMetric := GetScreenSize;
if (not g_d3dApp.m_bFullScreen = Windowed) and
(g_d3dApp.m_dwScreenWidth = ScreenSizeMetric.Width) then Exit;

g_d3dApp.SwitchDisplayModes(not Windowed, ScreenSizeMetric.Width,
ScreenSizeMetric.Height);
end;

В данном случае такой метод реализован как метод объекта меню TOptionsMenu и вызывается при подтверждении смены заданных настроек приложения. В данном случае настройки достаточно просты. Проверяется заданное в настройках разрешение экрана и если произошла смена режима оконный/полноэкранный или изменилось заданное разрешение будет вызван метод SwitchDisplayModes объекта g_d3dApp, который является экземпляром класса TD3DGameApp.

В простейшем случае можно рассмотреть реализацию переключений между оконным режимом приложения и полноэкранным режимом с разрешением например 800x600 пикселей и максимальной частотой покадровой развертки поддерживаемой монитором (100 Hz или выше).

Предварительно добавьте данный метод в описание класса TD3DGameApp

function SwitchDisplayModes(bFullScreen: Boolean;
dwWidth, dwHeight: Cardinal): HRESULT;

Затем реализуйте его в коде следующим образом -

function TD3DGameApp.SwitchDisplayModes(bFullScreen: Boolean;
dwWidth, dwHeight: Cardinal): HRESULT;
var
hr: HResult;
begin
if not m_bIsActive or not m_bDisplayReady then begin
result := S_OK;
Exit;
end;

// Check to see if a change was actually requested
if bFullScreen then
begin
if ((m_dwScreenWidth = dwWidth) and (m_dwScreenHeight = dwHeight)) and
(m_bFullScreen = bFullScreen ) then
begin
result := S_OK;
Exit;
end;
end
else
begin
if not m_bFullScreen then begin
result := S_OK;
Exit;
end;
end;

// Invalidate the old display objects
m_bDisplayReady := FALSE;
InvalidateDisplayObjects;

// Set up the new presentation paramters
if bFullScreen then
begin
m_d3dpp.Windowed := FALSE;
m_d3dpp.hDeviceWindow := m_hWndMain;
m_dwScreenWidth := dwWidth;
m_d3dpp.BackBufferWidth := dwWidth;
m_dwScreenHeight := dwHeight;
m_d3dpp.BackBufferHeight := dwHeight;
m_d3dpp.BackBufferFormat := m_d3dfmtFullscreen;
end
else
begin
m_d3dpp.Windowed := TRUE;
m_d3dpp.hDeviceWindow := 0;
m_d3dpp.BackBufferWidth := 0;
m_d3dpp.BackBufferHeight := 0;

m_dwScreenWidth := dwWidth;
m_dwScreenHeight := dwHeight;

m_d3dpp.BackBufferFormat := m_DesktopMode.Format;
end;

// Reset the device
hr := m_pd3dDevice.Reset( m_d3dpp );
if SUCCEEDED(hr) then
begin
m_bFullScreen := bFullScreen;
hr := RestoreDisplayObjects;
if SUCCEEDED(hr) then
begin
m_bDisplayReady := TRUE;
result := S_OK;
Exit;
end;
end;

// If we get here, a fatal error occurred
PostMessage( m_hWndMain, WM_CLOSE, 0, 0 );
result := E_FAIL;
end;

Все недостающие поля, описанные в реализации данного метода необходимо добавить в класс TD3DGameApp и инициализировать их в методе конструктора TD3DGameApp.Create и других необходимых методах, где это понадобится.

Заметьте, что внутри данного метода каждый раз при переключении между полноэкранным/оконным режимами или при смене разрешения полноэкранного режима происходит инвалидация InvalidateDisplayObjects всех зависимых от Direct3DDevice ресурсов, вызывается метод сброса устройства Direct3DDevice, а затем происходит восстановление ресурсов RestoreDisplayObjects

Этот момент очень важно учитывать при создании многоуровневых игр, в которых ресурсы для каждого уровня различны и загружаются при разных состояниях приложения. Тогда при переключении режимов инвалидация и восстановление необходимых ресурсов должна происходить в зависимости от заданного состояния приложения, в противном случае Вы получите логические ошибки, ошибки времени выполнения и множество других ошибок!!!

В случае с игрой "Ну, Погоди!" этот момент упущен, т.к. все необходимые ресурсы загружаются, инвалидируются, восстанавливаются и уничтожаются централизованно при старте приложения и его закрытии, а переключение в полноэкранный режим не используется.

 
Для лучшего понимания этих важных моментов, Вам обязательно нужно познакомиться с исходным кодом игры [Пример игры Donuts3D], а также со статьями и исходниками посвященными работе над проектом Нечто: Необъяснимое
 
В качестве практики предлагаю Вам внедрить вышеописанные технологии в код проекта своего D3D-приложения посвященного практической работе над данным уроком.
 
[назад] [страница 1] [далее] [к содержанию]
 
 
 
 
     
     
     
     
     
Содержимое данной страницы доступно только зарегистрированным пользователям.



Пожалуйста войдите на сайт - Вход

или пройдите процедуру регистрации - Регистрация

megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 1,0668