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


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

megainformatic - статья Тимонина Андрея - Таймер. Выводим время игры.
[к содержанию] [другие статьи Тимонина Андрея] Таймер. Выводим время игры. автор: Тимонин Андрей дата публикации на сайте Мега Информатик: 18.11.2012 Добро пожаловат
подробнее...

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

megainformatic - Игра "Веселый Буквоежка" - история создания проекта

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

megainformatic - Уроки Photoshop

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Купить Уроки Photoshop - Рисуем и Анимируем

megainformatic - Эмулятор игры Ну, Погоди!

сайт megainformatic - Говорящий Комикс Веселый Буквоежка

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - Моделируем девушку в 3d используя 3ds max

megainformatic - Уроки Fruity Loops Studio - пишем свою музыку

megainformatic - Уроки Fruity Loops Studio - пишем свою музыку - урок 1 - Быстрый старт

megainformatic - Сброник статей по дизайну и компьютерной графике. Обзор.

megainformatic - Уроки 3d на delphi directx - Вывод Заставки

Добро пожаловать в систему управления сайтом megainformatic cms

megainformatic - Создание эскиза и макета страницы сайта

megainformatic - Верстка созданного макета

megainformatic - Добавление модулей обеспечивающих минимально необходимый функционал

megainformatic - Основы добавления контента на сайт, управления и поддержки сайта

megainformatic - Проверка работы сайта, установка на хостинг

megainformatic - Основы продвижения созданного сайта

megainformatic - Создание шаблонов

megainformatic - Создание интернет-магазина

megainformatic - Музыкальные миры - композиция Морозное утро - 10 версий

ЛЕТО

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

megainformatic cms admin

megainformatic cms admin

megainformatic - Основы создания 3d игр - проект Тайны Морских Глубин

megainformatic - уроки delphi directx 8.1 3d - Основы Вращений и Управления камерой

megainformatic cms seo

megainformatic cms admin

megainformatic - Моделируем девушку в 3d - Подготовка 2d-эскиза тела человека

megainformatic cms stat kit

megainformatic cms seo

megainformatic - Теория и практика 3d игр - О Кватернионах

megainformatic - Теория и практика 3d игр - Основы теории векторов

megainformatic - Теория и практика 3d игр - Важные замечания

megainformatic - Моделируем девушку в 3d используя 3ds max - Подготовка к моделированию ноги - готовим ширму

megainformatic - Моделируем девушку в 3d используя 3ds max - Выполняем моделирование ноги

megainformatic - Моделируем девушку в 3d используя 3ds max - Улучшаем созданную модель женской ножки

megainformatic cms stat kit

megainformatic - Подводная лодка и подводный мир

megainformatic - megainformatic cms - Форма для смены шаблонов сайта - модуль template selector

megainformatic cms social

megainformatic cms social Руководство пользователя

megainformatic - megainformatic cms - Форма для смены шаблонов сайта - модуль template selector

модуль слайдера

ТЗ на сайт коллективных покупок

модуль slider

megainformatic cms seo

Поддержка сайтом нескольких языков - модуль multi lang

Поддержка сайтом нескольких языков - модуль multi lang

megainformatic - Моделируем девушку в 3d используя 3ds max - другие статьи сборника статей - обзор

установка нового шаблона в joomla 2.5.4

Описание продукта megainformatic cms social

подробнее

     
 
Урок 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 cms e-pro

Автоматизация обработки и доставки электронных заказов по партнерским программам.

 
     
 
megainformatic cms e-pro
Стоимость - 400 руб.
Заказать megainformatic cms e-pro
 
     
 

Демонстрация работы системы - megainformatic.ru/webprojects/epro

Документация по работе системы - megainformatic.ru/webprojects/epro

 
     
 

ОСОБЕННОСТИ СИСТЕМЫ

- Предназначена для автоматизации обработки и доставки электронных заказов, а также поддержки и управления сайтом.

- Написана на языке php. Для работы сайта использует базы данных mysql и файлы.

- Подробное документирование возможностей;

- Прозрачность использования и открытый исходный код;

КЛЮЧЕВАЯ ЗАДАЧА СИСТЕМЫ megainformatic cms e-pro

 
     
  СХЕМА РАБОТЫ СИСТЕМЫ  
     
  megainformatic cms e-pro схема работы  
     
 

Работает с партнерскими системами интернет-магазинов для обработки поступивших заказов. Из партнерской системы заказы поступают в форме e-mail уведомлений. Эти уведомления менеджер магазина просто копирует в обычный текстовый файл, а затем передает его на обработку системе megainformatic cms e-pro.

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

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

 
     
 

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

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

В чём заключается эта автоматизация:

1) Уведомления собранные менеджером интернет-магазина должны иметь определенную заданную структуру - для задания новой структуры нужно лишь описать её в соответствующем файле настроек системы;

2) Данные о пользователях и сделанных через партнерскую систему заказов заносятся в таблицу Пользователи (users) и Заказы (orders);

3) После выполнения операции обработки уведомлений можно выполнить доставку заказов в форме писем. Письма можно отправить выбранному списку пользователей.

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

Регистрационная информация по зарегистрированным пользователям при доставке заказов автоматически заносится в таблицу Регистрация (register).

4) Если возникает необходимость повторной доставки заказов в системе megainformatic cms e-pro предусмотрен соответствующий режим работы и повторная доставка может осуществляться неограниченное число раз.

 

 
     
 

В дополнение к системе автоматизации обработки заказов по партнерской программе Вы получаете:

- Полноценную CMS для создания и управления вашим сайтом.

- Система позволит вам построить информационный сайт или интернет-магазин и запустить его в работу.

- Вы не обременены поиском и подбором нужной CMS для вашего сайта - она уже у Вас в руках и содержит всё необходимое для создания полноценного сайта + интернет-магазина.

 
     
 

 

Спасибо за внимание и желаю Вам успехов !!!

 
     
подробнее

     
  эмулятор игры Ну, Погоди!  
     
 

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

Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше.

 
     
  [содержание] [назад] [страница 1] [далее]  
     
  Matrices - Матрицы - страница 1  
     
 

Итак, Мы подошли с Вами к изучение примера Matrices

Он построен всецело на тех же принципах, что и примеры CreateDevice и Vertices.

Нововведением является использование функции анимирования FrameMove, которая правда пока не вынесена в отдельную функцию, а называется пока SetupMatrices, кроме того, рассмотрен принцип трансформаций моделей с применением матриц на примере вращения простейшей модели в виде треугольника.

 
     
 

В сущности код примера Matrices это тот же самый код, что и Vertices.

Основное отличие - добавлена функция SetupMatrices

VOID SetupMatrices()
{
// матрица 3d-мира - world matrix, мы просто вращаем объект вокруг оси Y.
D3DXMATRIXA16 matWorld;

// задаем матрицу вращения для генерации полного оборота в 2*Пи-радиан
// каждые 1000 ms (миллисекунд). Для предупреждения потери точности
// в вычислениях, системное время модулируется и умножается на период вращения
// до преобразования в угол поворота в радианах

UINT iTime = timeGetTime() % 1000;
FLOAT fAngle = iTime * ( 2.0f * D3DX_PI ) / 1000.0f;
D3DXMatrixRotationY( &matWorld, fAngle );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

// Настраиваем view matrix - матрицу Вида. Матрица вида определяется как
// положение глаза vEyePt, положение точки куда смотрит глаз vLookatPt и

//направление в котором должен быть поднят глаз vUpVec. Здесь

//указываются конкретные векторные координаты для этих точек
D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;

//по ним строится матрица Вида и задается в качестве таковой
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

// Матрица Проецирования - projection matrix - это перспективное преобразование
// приводящее геометрию из 3D пространства вида к 2D пространству экрана Viewport,
// (перспектива приводит к уменьшению удаленных на расстояние объектов). Для
// построения Перспективной трансформации, Мы используем Угол обзора field of view

// 1/4 pi что является наиболее распространенным,
// Соотношение длины экрана к ширине - aspect ratio, и ближний near и дальний far планы // привязки (которые определяют дистанцию, на которой следует отрисовывать

// геометрию).

D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI / 4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}

 
     
 

Функция Render также претерпела небольшие изменения - перед выполнением отрисовки сцены вызывается метод её анимирования -

// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// вообще говоря, данный метод должен вызываться вне скобок BeginScene..EndScene

//кроме того, более правильно и понятно будет создать отдельную функцию FrameMove, //разместить вызов функции SetupMatrices внутри неё, а отсюда убрать.

//вызов метода FrameMove организовать внутри wWinMain
SetupMatrices();

// Render the vertex buffer contents
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );

// End the scene
g_pd3dDevice->EndScene();
}

 
     
 

Вот как должны выглядеть описанные исправления -

//FrameMove()

VOID FrameMove()
{
// Setup the world, view, and projection matrices
SetupMatrices();
}

//Render()

VOID Render()
{
// Clear the backbuffer to a black color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 0 ), 1.0f, 0 );

// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// Setup the world, view, and projection matrices
//SetupMatrices();

// Render the vertex buffer contents
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );

// End the scene
g_pd3dDevice->EndScene();
}

// Present the backbuffer contents to the display
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

//wWinMain

INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT )
{
// Register the window class
WNDCLASSEX wc =
{
sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
L"D3D Tutorial", NULL
};
RegisterClassEx( &wc );

// Create the application's window
HWND hWnd = CreateWindow( L"D3D Tutorial", L"D3D Tutorial 03: Matrices",
WS_OVERLAPPEDWINDOW, 100, 100, 256, 256,
NULL, NULL, wc.hInstance, NULL );

// Initialize Direct3D
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
// Create the scene geometry
if( SUCCEEDED( InitGeometry() ) )
{
// Show the window
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );

// Enter the message loop
MSG msg;
ZeroMemory( &msg, sizeof( msg ) );
while( msg.message != WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else {
FrameMove();
Render();
}
}
}
}

UnregisterClass( L"D3D Tutorial", wc.hInstance );
return 0;
}

 
     
  Оранжевым цветом я пометил добавленный или исправленный код.  
     
 

Вы также заметите, что в данном примере применяется другой тип вершин -

// описание структуры для типа вершин
struct CUSTOMVERTEX
{
FLOAT x, y, z; // untransformed - нетрансформировання, 3D позиция вершины
DWORD color; // вершинный цвет
};

// формат FVF, описывающий применяемый тип вершины - вершина содержит только

// описание положения и вершинного цвета
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

 
     
 

Слегка изменилась и функция InitD3D -

добавились строки кода

// отключаем culling, так как требуется сделать видимой переднюю и заднюю грани

// треугольника
g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

// Отключаем D3D освещение, поскольку Мы используем собственный цвет вершин
g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );

 
     
  В качестве задания для самостоятельной работы попробуйте выполнить модификацию данного примера, чтобы использовать вращающийся квадрат вместо вращающегося треугольника.  
     
     
  [содержание] [назад] [страница 1] [далее]  
     
подробнее

Creating game on fle game engine - Simple game / Создание игры на fle game engine - Simple game

7 - Перемещения игровой сцены



Мы плавно подобрались к изучению следующего вопроса.

read paper in english





Содержание

страница 1 - Спрайты

страница 2 - Объекты

страница 3 - Наложение объектов

страница 4 - Код - Настройка параметров Scene Editor fge и написание кода для вывода спрайта шарика в вашем первом игровом приложении

страница 5 - Отображаем прыгающий шарик

страница 6 - Загрузка игровой сцены

страница 7 - Перемещения игровой сцены

страница 8 - Закрываем часть сцены от пустот при помощи черной текстуры с прорезью, ограничиваем перемещение сцены

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

страница 10 - Проверка столкновений

страница 11 - Игровой счёт, звуки, музыка

урок #2 страница 1 - Создание новых сцен для игры simple game, расширенная версия simple game extended

13. Скроллинг больших локаций

14. использование переменных в игре на c++ directx 9c

15. Мульти анимация







3) Научиться управлять перемещением сцены - чтобы она двигалась при перемещениях мыши.

Для реализации управления в игре используется компонент DirectInput. Он входит в состав DirectX и служит для управления игрой. Стандартные поддерживаемые устройства это клавиатура и мышь.

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

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

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

Итак, чтобы отследить перемещения мыши в модуль start.h добавим такой код

void LoadGameDataBlock();//это код, после которого надо добавить

//перемещение указателя мыши
void ChangeGameCursorPos(); //это код, который нужно добавить



А в модуль start.cpp добавить

в методе

CD3DGameApp::FrameMove

case APPSTATE_READY:

UpdateInput( &m_UserInput ); //это код, после которого надо добавить

//перемещение указателя мыши
ChangeGameCursorPos(); //это код, который нужно добавить



и в самый конец модуля start.cpp

добавить реализацию этого метода -

void CD3DGameApp::ChangeGameCursorPos()
{
POINT CursorPos;
GetCursorPos(&CursorPos);

RECT rcClip;
GetWindowRect(m_hWndMain, &rcClip);

LONG cursor_at_window_x = CursorPos.x - rcClip.left;
LONG cursor_at_window_y = CursorPos.y - rcClip.top;

LONG cursor_spr_left_limit = 0;
LONG cursor_spr_top_limit = 0;
LONG cursor_spr_right_limit = (LONG)m_dwScreenWidth;
LONG cursor_spr_bottom_limit = (LONG)m_dwScreenHeight;

if ( cursor_at_window_x < cursor_spr_left_limit )
cursor_at_window_x = cursor_spr_left_limit;

if ( cursor_at_window_x > cursor_spr_right_limit )
cursor_at_window_x = cursor_spr_right_limit;

if ( cursor_at_window_y < cursor_spr_top_limit )
cursor_at_window_y = cursor_spr_top_limit;

if ( cursor_at_window_y > cursor_spr_bottom_limit )
cursor_at_window_y = cursor_spr_bottom_limit;

m_scrCursorPos.x = (float)cursor_at_window_x;
m_scrCursorPos.y = (float)(cursor_at_window_y);
g_AI_Ball_Sprite.m_v2Pos = m_scrCursorPos;
}



Все - теперь при перемещениях мыши наш шарик перемещается вместе с ней. Что нам и требуется только не для шарика, а для самой сцены.

Прыгающий шарик перемещаемый мышкой



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

А сейчас отключим шарик от перемещений мышью - для этого закомментируем строку кода -

//g_AI_Ball_Sprite.m_v2Pos = m_scrCursorPos;


Сохраним изменения в проекте, перекомпилируем приложение. И увидим, что шарик уже не перемещается при перемещении мыши.

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

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

Но у нас же есть такой объект ! - если Вы помните из страницы 6 - Загрузка игровой сцены, он называется

m_pGameSceneDataFile

Уже хорошо. А помните ли Вы какой метод для него добавляли ? Он был связан со скроллингом сцены.

ScrollGameScene ?

Да ! Он самый. Посмотрите какой код там внутри и Вы, возможно уже догадаетесь какой код нужно написать. Точнее всего несколько строк кода.

Давайте напишем его.

//g_AI_Ball_Sprite.m_v2Pos = m_scrCursorPos; //после данной закомментированной строки добавим нижеследующий код

POINT Pos;
Pos.x = cursor_at_window_x;
Pos.y = cursor_at_window_y;

D3DXVECTOR2 vPos;
Screen2Vector(&Pos, &vPos);

g_fHorizontalScrollOffset = vPos.x;
g_fVerticalScrollOffset = vPos.y;
ScrollGameScene();



Сохраним изменения в проекте, перекомпилируем приложение. И увидим, что теперь при перемещениях мыши перемещается игровая сцена.



Мы добились желаемого !!!

Однако, как Вы можете заметить, есть и некоторые недостатки.

1) Это то, что когда сцена уходит за пределы экрана, на её месте остается пустота - синий фон.

и

2) То что шарик не всегда красиво проваливается в яму. Если он окажется немного ниже ямы или чуть левее или правее - то получается совсем не красиво. Часть шарика перекрывается фоном имитирующим верхнюю видимую часть ямы.

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

А вот для решения второй проблемы можно придумать более хитрые способы. О них мы поговорим на следующей странице. Оставайтесь с нами ! :)



[назад] [далее]



  Простой и компактный сайт с подключенным модулем отзывов/комментариев, без необходимости использования баз данных my sql. подробнее...
короткие ссылки на вашем сайте - при помощи модуля short link пригодного для любой cms. подробнее...

Модуль отзывов/комментариев для вашего сайта
500 руб.
Модуль коротких ссылок
250 руб.
Приключения Кости Коробкина - Как я провел лето - интерактивный комикс
Костя Коробкин


Уроки Flash, бесплатные Flash - игры.
Уроки Flash
бесплатно
бесплатные flash игры
бесплатно
Модуль галерей для любой cms
1500 руб.
megainformatic cms rs
14000 руб.
 
     
  Поддержка сайтом нескольких языков (multi lang), создание собственной системы личных кабинетов, соц. сети или фриланс - биржи (megainformatic cms social), создание сервиса коллективных покупок на базе megainformatic cms groupon, онлайн сервис подсчёта статистики ключевых слов в статьях вашего сайта keywords gen + описание кода данного сервиса, с возможностью бесплатно реализовать его аналог на своём собственном сайте.
Поддержка сайтом нескольких языков
400 руб.
megainformatic cms social
12000 руб.
megainformatic cms groupon
14000 руб.
Онлайн - сервис подсчёта статистики ключевых слов
бесплатно

webjob.megainformatic.ru - сервис для фриланс проектов - место встречи заказчиков и исполнителей

 
 

Социальная сеть webjob.megainformatic.ru

webjob.megainformatic.ru
webjob
веселая математика
бесплатно
template selector
150 руб.
megainformatic cms express files + модуль slider
200 руб.

webjob.megainformatic.ru - сервис для фриланс проектов - место встречи заказчиков и исполнителей

 
     
 

Системы управления сайтом, уроки

megainformatic cms admin
250 руб.
уроки delphi direct x 3d
бесплатно
megainformatic cms seo
350 руб.
megainformatic cms stat kit
500 руб.

megainformatic cms admin - простая и компактная система для работы и управления сайтом

 
     
 
megainformatic cms express
100 руб.
megainformatic cms e-mailer
1800 руб.
megainformatic cms e-shop
1000 руб.
megainformatic cms e-pro
500 руб.
 
 
 
 
     
     
 

megainformatic cms free и серия продуктов - Уроки Photoshop

megainformatic cms free
бесплатно
уроки photoshop
100 руб.
уроки photoshop - чудеса !
100 руб.
уроки photoshop -  рисуем и анимируем
250 руб.

Данная серия посвящена описанию приемов и методов создания изображений, с помощью инструментария программы Adobe Photoshop. Кроме того, многие описанные средства могут вам помочь при освоении и многих других программ для работы с растровой графикой - GIMP, Corel Photo Paint и других.

 

 
 
     
 

бесплатные игры 2d и 3d, а также эмулятор Ну, Погоди!

эмулятор игры Ну, Погоди !
500 руб.
Дорога в Город
бесплатно
Donuts 3D
бесплатно
Нечто: Необъяснимое
бесплатно

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

 
     
 
 
 
     
 

серия игр про Веселого Буквоежку, и бесплатно распространяемая игра Нечто: Необъяснимое - в плену желаний

Говорящий комикс - Веселый Буквоежка
100 руб.
Настольная игра - Веселый Буквоежка
110 руб.
Как создать игру ? Программируем сами
fle game engine
Нечто: Необъяснимое - в плену желаний
бесплатно

Здесь представлены новинки жанра - Говорящий Комикс, Настольная игра, А также продукт, который позволит Вам научиться создавать игры самостоятельно. Ну и конечно изюминка в своём роде - бесплатная игра - Нечто: Необъяснимое - в плену желаний

 
     
 
 
 
     
 

Серия бесплатных онлайн уроков, посвященных 3ds max, photoshop, c++, directx, delphi и php.

Уроки 3ds max
бесплатно
Уроки c++ и directx
бесплатно
Уроки трекерской музыки
бесплатно
Рисуем волка
бесплатно
Уроки php и создания сайтов
бесплатно
Пример 3d игры на delphi directx с исходниками
бесплатно
Набор разработчика игр
100 руб.
Ваше Визуальное шоу
100 руб.

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

Продукты Набор разработчика и Ваше Визуальное Шоу распространяются платно.

 
     
 
 
 
     
     
 

уроки и продукты различной тематики

Как создать игру Ну, Погоди! на delphi directx
бесплатно
Музыкальные миры CJ andy - моя авторская музыка mp3
бесплатно
Уроки Photoshop free (Свободно распространяемые)
бесплатно
megainformatic cms express - Ваш Персональный Сайт на php + my sql
100 руб.

Бесплатные Уроки Photoshop free, Бесплатные Уроки по программированию на delphi directx - Как создать игру Ну, Погоди!, Бесплатная Авторская музыка в формате mp3 - Музыкальные Миры, Платно распространяемый продукт megainformatic cms express - система для быстрого создания Вашего сайта на php + my sql.

 
     
 
 
 
     
 

Проекты игр, уроки

Игра Веселый Буквоежка
150 руб.
Уроки Delphi Directx 8.1
бесплатно
Моделируем девушку в 3d studio max
бесплатно
Уроки музыки в FL Studio
бесплатно

Игра Веселый Буквоежка, уроки delphi directx 8.1 для начинающих (описываются основы 3d игр), моделируем девушку в 3d studio max, уроки музыки - пишем музыку в Fruity Loops Studio

 
     
 
 
 
     
     
     
 
megainformatic cms express files

Быстрая и Компактная Система Управления Вашим Сайтом - megainformatic cms express files

megainformatic cms express files - это простое, быстрое и очень компактное решение для создания первого вашего сайта. НЕ ИСПОЛЬЗУЕТ базы данных mysql. Вместо этого используются файловые базы данных. Поэтому Вы можете использовать систему даже на хостинге с поддержкой php, но без поддержки баз данных my sql.

Очень проста в установке - достаточно вам скопировать все файлы на ваш хостинг и сайт готов к работе !!!

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

Подробнее...

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

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



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


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