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


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

megainformatic - Примеры моих работ
        моё портфолио в виде галереи изображений (скрины сайтов и приложений) ниже представл
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 5

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 6

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 7

megainformatic - Веселый Буквоежка - онлайн комикс - страница 1

megainformatic - Веселый Буквоежка - онлайн комикс - страница 2

megainformatic - Веселый Буквоежка - онлайн комикс - страница 3

megainformatic - Веселый Буквоежка - онлайн комикс - страница 4

megainformatic - Веселый Буквоежка - онлайн комикс - страница 5

megainformatic - Веселый Буквоежка - онлайн комикс - страница 6

megainformatic - Веселый Буквоежка - онлайн комикс - страница 7

megainformatic - Веселый Буквоежка - онлайн комикс - страница 8

megainformatic - Веселый Буквоежка - онлайн комикс - страница 9

megainformatic - Веселый Буквоежка - онлайн комикс - страница 10

megainformatic - Веселый Буквоежка - онлайн комикс - страница 11

megainformatic - Веселый Буквоежка - онлайн комикс - страница 12

megainformatic - Веселый Буквоежка - онлайн комикс - страница 13

megainformatic - Веселый Буквоежка - онлайн комикс - страница 14

megainformatic - Веселый Буквоежка - онлайн комикс - страница 15

megainformatic - Веселый Буквоежка - онлайн комикс - страница 16

megainformatic - Веселый Буквоежка - онлайн комикс - страница 17

megainformatic - Веселый Буквоежка - онлайн комикс - страница 18

megainformatic - Веселый Буквоежка - онлайн комикс - страница 19

megainformatic - Веселый Буквоежка - онлайн комикс - страница 20

megainformatic - Веселый Буквоежка - онлайн комикс - страница 21

megainformatic - Веселый Буквоежка - онлайн комикс - страница 22

megainformatic - Веселый Буквоежка - онлайн комикс - страница 23

megainformatic - Эмулятор ZX-Spectrum, БК-0010.01 и их работа в эмуляторе DosBox 0.74

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 1

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 2

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 3

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 4

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 5

megainformatic - первый независимый онлайн-журнал комиксов ККК Костя Коробкин Комикс номер 1 март 2016

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 6

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 7

megainformatic - Эмулятор БК-0010.01 версия 2.6 для Windows 9x/Me/2000/XP автор Юрий Калмыков 2002 год

megainformatic - api получения готового решения для решения различных задач возникающих при создании сайта

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 8

роман Eternity Вечность - автор Синицин Андрей megainformatic

роман Eternity Вечность - автор Синицин Андрей megainformatic - страница 2

роман Eternity Вечность - автор Синицин Андрей megainformatic - страница 3

роман Eternity Вечность - автор Синицин Андрей megainformatic - Windows Sockets 2, ping, Windows SDK 7, чем открыть hxs файл - страница 4

megainformatic - Размещение Вашей рекламы на нашем сайте

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 9

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 10

роман Eternity Вечность - автор Синицин Андрей megainformatic - В чём отличие в применении символов & и * в языке c++ ? также продолжаем изучать Windows Sockets 2 и пример simple - страница 5

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 11

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

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 12

роман Eternity - страница 6 + решение по анимации закрывающихся дверей лифта

megainformatic - Сообщить об ошибке

Balls on Lift Table of Records / Шарики на лифте Таблица рекордов

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 13

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Рисуем шарик / How make the game - series of lessons - draw ball

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Содержание / How make the game - series of lessons - Index

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Разные шарики / How make the game - series of lessons - Different balls

подробнее

Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 4

Предлагаем вашему вниманию онлайн-комикс Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp).

Вдруг всё исчезло. И я снова погрузился в другой мир...

онлайн-комикс Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - страница 4

если кликать картинку она будет последовательно меняться в размерах от 620 до 2048 пиксель.

[страница 1] [страница 2] [страница 3] [страница 4] [страница 5]  [страница 6] [страница 7] 

подробнее

     
 

Доверенные партнеры сайта Мега Информатик -

 
     
 
Яковенко Андрей Яковенко Андрей. Интересный и разносторонний человек. Занимается созданием сайтов под ключ на cms WordPress, Joomla и DLE. Помимо этого примерный семьянин и увлекающийся человек. Самое главное - очень открытый, которому можно смело довериться. Подробнее узнать об Яковенко Андрее можно обратившись на его личный сайт - Яковенко Андрей

 
 
     
 

ignazius.ru

Сайт Тимонина Андрея - начинающего сайтостроителя и игродела :)

 
 
     
   
     
 

 
 
     
     
     
 

Вам понравился наш сайт ? И Вы хотите обменяться с нами ссылками ?

Отлично! Сделать это просто - разместите на страницах своего сайта следующий код -

 
     
 


or this

 
     
 

И пришлите на адрес creator@megainformatic.ru код ссылки Вашего сайта - он будет размещен здесь !

 
     
  Вот как должна выглядеть картинка со ссылкой на наш сайт -  
     
  Мега Информатик - исследовательско-креативный сайт посвященный разработке компьютерных игр  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
подробнее

Глубины программирования на C++

подробнее

     
 
Урок 4 Построение класса приложения
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 2] [далее] [к содержанию]
 
Познакомившись с кодом класса CD3DApplication описанным в модуле D3DApp.pas библиотеки delphi directx 8.1 мы переходим к рассмотрению класса TD3DGameApp являющегося базовым классом D3D-приложения, используемым в игре "Ну, Погоди!". По большому счету ничего нового о функционировании D3D-приложения Вы здесь не узнаете, однако в качестве примера того, как строится конкретный базовый класс на примере конкретной законченной игры дальнейшее повествование будет Вам все же небезынтиресно.
 

Начнём с того, что модуль D3DApp.pas и CD3DApplication в игре "Ну, Погоди!" не применяется вообще. Вместо этого был создан самостоятельный базовый класс ориентированный именно на потребности конкретной игры, а не на те особенности, которые необходимо было рассмотреть в качестве примера во всех приложениях из DirectX SDK. Иными словами назначение класса CD3DApplication именно демонстративное.

Класс TD3DGameApp, который мы рассмотрим ниже, ориентирован на определенную конкретику, связанную с особенностями проекта игры "Ну, Погоди!"

 
Функционирование приложения строится на тех же принципах, которые мы рассматривали начиная с 1 урока.
 

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

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

 

Что потребуется при написании собственной игры?

Сначала я перечислю то, что потребуется обязательно при реализации абсолютно любой игры -

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

Остальные поля и методы, дополнительные классы и классы необходимых игровых объектов зависят от конкретной специфики Вашей игры, а также фантазии и опыта разработки.

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

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

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

 
Теперь рассмотрим конкретные примеры того, что имеет место в коде игры "Ну, Погоди!". Замечу, что всё описанное ни в коем случае не является и не должно являться для Вас догмой. Поработав с примером и над созданием собственной игры Вы обязательно уясните для себя что-то свое и будете делать то, что Вам потребуется по-своему, а не так как описано здесь один в один. Другими словами по мере приобретения Вами опыта Вы сами решите что и как должно происходить в Вашем коде.
 

Опустим описание реализации кода методов TD3DGameApp.Create, Create_ и Destroy, так как оно за небольшими исключениями полностью похоже на то, что мы рассматривали на протяжении предыдущих 3х уроков.

Рассмотрим метод TD3DGameApp.OneTimeSceneInit

Внутри данного метода я обычно создаю объекты DirectInput и DirectSound, выполняю первоначальную инициализацию D3D-приложения, вызываю функцию рандомизации рандомизатора и перевожу приложение в состояние начальной инициализации ресурсов.

 

Далее действие происходит уже внутри FrameMove и Render. В зависимости от состояния приложения происходит загрузка необходимого минимума ресурсов, начинается опрос действий со стороны пользователя посредством DirectInput. Реакция на события выбора меню TMainMenu реализована вызовом обработчиков пунктов данных меню.

Наконец, когда пользователь запустил игру приложение переходит в состояние игры и выполняется игровой процесс.

 
Как происходит осуществление игрового процесса? Основные составляющие его это - анимация, вывод графики и рассчет игровой логики. Пользователь реагирует на те или иные игровые ситуации выполняя игровые действия, в соответствии с этим меняется и игровой процесс.
 

Приложение построено таким образом, что после выполнения OneTimeSceneInit запускается непрерывный процесс выполнения метода TMainForm.ApplicationEventsIdle. Этот метод вызывается всегда, когда приложение находится в состоянии бездействия, а поскольку кроме данного метода приложение больше не выполняет никакую работу (помимо отрисовки и рассчетов игровой логики, выполняемых именно внутри данного метода), то всё процессорное время выделенное приложению уходит именно на выполнение данного метода.

Внутри данного метода исполняется g_d3dApp.Render3DEnvironment; в котором и реализовано выполнение упомянутых выше методов FrameMove и Render.

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

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

После успешного выполнения данной операции состояние переходит в asInit. Это необходимо, чтобы обеспечить лишь однократную загрузку текстур (вспомним, что метод Render3DEnvironment вызывается периодически).

В состоянии asInit происходит лишь смена состояния на новое asEndInit, которое сразу же переключит приложение в состояние готовности - asReady

Такие сложности связаны именно с периодической природой Render3DEnvironment, поэтому ОБЯЗАТЕЛЬНО! учитывайте этот момент, иначе будете получать всевозможные ошибки времени выполнения.

В состоянии asReady начинается ожидание действий со стороны пользователя (UpdateInput).

Назначение клавиш каждому из действий происходит в процедуре DefineDefaultKeys.

Обработка этих действий происходит в режимах готовности (asReady) и игры (asGame).

Режим паузы в ответ на действие GamePause переключает индикатор паузы m_bPaused на противоположное значение. В коде формирования игровой ситуации FrameMoveGameSituation учитывается состояние данного индикатора.

Также проверяется нажатие клавишы выхода из игры - действие GameExit.

Нажатие нарисованных на игровой панели клавиш при помощи мыши обрабатывается здесь следующим образом. Если выполняется действие PressButton, то определяются в каком месте находится при этом указатель мыши. Попадание его в определенную область вызывает срабатывание нужной кнопки на игровой панели. GameButtonDownUp применяется для корректной отработки нажатий/отпусканий клавиш игровой панели. В момент отпускания клавиши игровой панели срабатывает привязанное к ней действие. Кроме того, красным клавишам управления волком сопоставлены действия от клавиатуры LeftUpCatch, LeftDownCatch, RightUpCatch, RightDownCatch, т. к. по мере нарастания скорости игры требуется более высокая реакция игрока.

 

 

В состоянии asGame выполняется метод FrameMoveGameScene. Заглянув в его код Вы увидите несколько различных режимов, в которых может находиться игра:

gmRestart, gmGameA, gmGameB, gmTimer, gmSetAlarm, gmEndSetAlarm, gmStartGameOver, gmGameOver, gmStartLoadWinMultic, gmShowWinText, gmWinMultic, gmShowGameAMaxScore,
gmShowGameBMaxScore

 

Перечислим их назначение.

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

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

gmGameB - аналогично, но яйца катятся с 4х лотков

gmTimer - эмуляция поведения электронной игры "Ну, Погоди!" в режиме отсчета времени. Отображается реальное время системных часов аналогичное тому, что имеется в правом нижнем углу экрана Windwows (в трее).

gmSetAlarm, gmEndSetAlarm - эмуляция режима установки времени подачи сигнала будильника, при этом если игра запущена, то в режимах "игра А", "игра Б" или отсчет времени в заданное время будет подан сигнал будильника

gmStartGameOver, gmGameOver - проигрыш, игра находится в состоянии ожидания дальнейших действий пользователя

gmStartLoadWinMultic, gmShowWinText, gmWinMultic - победа! игрок набрал трижды 999 очков. при этом будет показан поздравительный текст, а затем небольшой анимированный мультфильм с участием волка, зайца и других персонажей

gmShowGameAMaxScore, gmShowGameBMaxScore - режим показа максимального набранного в данном режиме количества очков - срабатывает в момент нажатия и удержания клавиш "игра А" или "игра Б" на игровой панели

 

Вам наверное интересно как осуществляется отображение графики в игре?

Начнём с того, что заглянем внутрь методов LoadGameTextures, RestoreGameTextures, InvalidateGameTextures, FreeGameTextures. В этих методах показано, как имена текстур из текстового файла загружаются сначала в список имен, а затем по этому списку производится загрузка и построение списка текстур (объектов класса TD3DImage2D). Из списка имен также считываются параметры размещения и масштабирования изображений.

В режиме игры А или Б сначала происходит вызов FrameMoveGameSituation;

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

1) Если индикатор паузы переключен в True, то DXTimer сбрасывается, а метод завершает работу;

2) Формируется набор нескольких положений волка. Это необходимо при больших скоростях игры, чтобы игрок успел поймать яйца катящиеся сразу с нескольких лотков, в противном случае игра становится непроходимой.

3) Определяется текущее положение волка

4) Генерируются новые яйца на лотках, анимируется их качение по лоткам, анимируется выглядывание зайца из окошка, постепенно наращивается темп игры

5) Проверяется и анимируется разбивание яиц

6) Осуществляется мерцание и сброс (если требуется) штрафных очков

Вывод графики происходит внутри метода Render также в зависимости от состояния приложения.

DrawGameView > DrawGameScene осуществляет собственно рисование в зависимости от режима игры.

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

В реализации метода DrawGameElement нет ничего сложного. В зависимости от индекса вызывается нужный объект TD3DImage2D с вызовом его метода Draw2. Параметры вывода (координаты и масштабные коэффициенты извлекаются из параметров объекта PGamePanelElement).

 

Вот собственно и весь вывод графики.

Вывод звука осуществляется еще проще. Достаточно Вам посмотреть методы

function CreateSoundObjects(h_Wnd: HWND): HRESULT;
procedure DestroySoundObjects;
function LoadSoundList: HResult;
procedure FreeSoundList;
procedure PlaySound(Index: Integer);
procedure PlayEggRun;

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

 
Конечно простота реализации данной игры обусловлена в большой степени ее особенностями. Большинство объектов статичны, анимация сводится лишь к скрытию одних и показу других картинок. Логика игры также достаточно проста.
 
Возможно чуть более сложным Вам покажется использование 2D-анимации, которая применяется в призовом мультфильме. Этот процесс также основан на использовании класса TD3DImage2D. Более подробно о нём мы поговорим в 7 уроке.
 
Вот кажется и всё вкратце, о создании базового класса игрового приложения, который применялся в игре "Ну, Погоди!". Если есть вопросы - милости просим на форум или пишите на мой e-mail.
 
Но думаю, что особых трудностей не будет. Нужно лишь поэкспериментировать над созданием собственного, пусть пока небольшого, но уже полноценного игрового проекта. Удачи Вам!!!
 
[назад] [страница 2] [далее] [к содержанию]
 
     
     
     
     
Содержимое данной страницы доступно только зарегистрированным пользователям.



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

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

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

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



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


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