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


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

megainformatic - Уроки Photoshop
             
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Как создать игру ? - Программируем сами - пример CreateDevice страница 3

megainformatic - Как создать игру - Vertices - Вершины - страница 1

megainformatic - Как создать игру - пример Matrices

megainformatic - Уроки Photoshop - Чудеса

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

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

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

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

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

megainformatic - Уроки Photoshop

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

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

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

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

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 4

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

megainformatic - Оплата заказа через Сбербанк

megainformatic - Пример игры с исходным кодом Donuts3D

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - программируем сами

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - создаем игровую оболочку

megainformatic - Открытый Полный Исходный код игры Дорога в Город

megainformatic - Как создать игру - Веселый Единственный Буквоежка - программируем основу будущей игры

megainformatic - Как создать игру - Веселый Единственный Буквоежка - выводим заставку

megainformatic - Как создать игру - Веселый Единственный Буквоежка - игровое меню

megainformatic - Как создать игру - Веселый Единственный Буквоежка - движение и анимация героя

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

megainformatic - Примеры моих работ

megainformatic - Музыкальные темы

megainformatic - Уроки Photoshop - Чудеса

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

megainformatic - Онлайн Обучение, Репетитор

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

megainformatic - Уроки Photoshop - Рисуем и Анимируем - Урок 1 - Старт

megainformatic - Уроки Photoshop - Рисуем и Анимируем на AllSoft.ru

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

megainformatic - megainformatic cms Система Управления Контентом

megainformatic - Темы для WordPress

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

megainformatic - Макет дизайна Вашего сайта

скачать megainformatic cms

megainformatic - Итоги 2010 года

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

megainformatic - как создать инсталлятор для собственной cms

megainformatic - Новости - страница 2

Нововведения в megainformatic cms

Web Администрирование

Уроки Верстки

Система автоматизированной е-майл рассылки

Система автоматизированной е-майл рассылки

megainformatic - Выгрузка файла на сайт

megainformatic - выпадающее меню на html и css

megainformatic - Использование checkbox

подробнее

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

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



read paper in english

Пришло время перейти к самому главному и интересному вопросу - загрузке и отображению созданной вами в Scene Editor fge игровой сцены.





Содержание

страница 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. Мульти анимация







С прыгающим шариком пока всё ясно. Оставим его ненадолго. Теперь пришло время загрузить нашу игровую сцену.

1) Нам нужно загрузить созданную сцену в наше приложение и показать на экране.

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

Прежде нужно подготовить все файлы ресурсов игровой сцены, как это было описано на странице 2 - Объекты

Уберем все неиспользуемые типы, объекты и изображения - оставим только





simple_game\SceneEditor\Media\textures\environment\desc\scene_editor_types.txt



none; 0;
ai_player; 1;
floor; 2;
test; 3;


simple_game\SceneEditor\Media\textures\environment\desc\scene_editor_texlist.txt



ball; ai_player; ai_player\jump.tga; 64; 128; 0; 0; 4; 8.0f; 14.0f;
floor; floor; floor\floor.jpg; 101; 101; 0; 0; 1; 0.0f; 0.0f;
floor_front; floor; floor\floor_front2.tga; 101; 101; 0; 0; 1; 0.0f; 0.0f;
floor2; floor; floor\floor2.jpg; 101; 101; 0; 0; 1; 0.0f; 0.0f;


Следует иметь в виду, что если Вы меняете файлы типов и ресурсов, то созданные с их использованием файлы сцен уже работать не будут !

Поэтому нужно реализовать новую сцену с новой сборкой прописанных ресурсов - просто повторив уже ранее проделанное на странице 3 - Наложение объектов

Создание новой сцены во fle game engine - в редакторе сцен Scene Editor 1.0.2 - сцена готова

Теперь берем всю папку

simple_game\SceneEditor\Media\textures\environment\





и переносим её в папку ресурсов нашей игры simple_game

simple_game\simple_game\Media\textures\





Папку

simple_game\SceneEditor\scenes\simple_game\



и файл созданной вами игровой сцены, у меня он назывался scene_3.SCN,

переносим в папку

simple_game\SceneEditor\Media\textures\environment\scenes\



Т. е. вот так

simple_game\SceneEditor\Media\textures\environment\scenes\simple_game\scene_1.SCN



Сцену я снова назвал scene_1.SCN, чтобы обозначить, что это будет самая первая (и пока единственная) игровая сцена в нашей игре simple_game.



Файлы ресурсов сцены подготовлены, теперь разберемся как загрузить сцену в игру и отобразить.

Первое, что Вам потребуется - это модуль GameSceneFile т. е. 2 файла - GameSceneFile.h и GameSceneFile.cpp которые нужно будет добавить в проект.

подключение модуля GameSceneFile в ваш проект

Далее в файл start.h после строки

#include "d_input.h"

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

#include "GameSceneFile.h"



Далее в класс нашего приложения CD3DGameApp После строчки

bool m_bShowScreenOptionsBtn;

добавляем новое поле - CGameSceneDataFile* m_pGameSceneDataFile;



Это объект для управления нашей сценой. Все его методы описаны в модуле GameSceneFile представленном, как Вы уже видели 2 файлами - GameSceneFile.h и GameSceneFile.cpp.

Файл GameSceneFile.h - заголовочный - описывает заголовки функций, полей и методов, а файл GameSceneFile.cpp описывает их реализацию на языке программирования c++.



Теперь нужно добавить в модуль нашего приложения start.cpp следующие строки кода



1)

#include "game_sprite.h" //это строка после которой нужно добавить

#define SimpleGameLocation L"\\Media\\textures\\environment\\scenes\\simple_game\\scenes_list.txt" //это строка которую нужно добавить
#define SimpleGameScenesPath L"\\Media\\textures\\environment\\scenes\\simple_game\\" //это строка которую нужно добавить




Вам потребуется еще создать файл scenes_list.txt в папке

simple_game\simple_game\Media\textures\environment\scenes\simple_game\





И поместить в него следующую запись -

scene_1.scn



И больше ничего, никаких переводов строки и пустых строк !!



Далее, там же, в модуле нашего приложения start.cpp

2)

В методе -

CD3DGameApp::CD3DGameApp



CD3DGameApp::CD3DGameApp()
{
//...

m_pSprite = NULL;

} //это строка после которой нужно добавить



//это строки которые нужно добавить

void CD3DGameApp::LoadGameScene()
{
//создание игровой сцены
m_pGameSceneDataFile = new CGameSceneDataFile();
m_pGameSceneDataFile->PreLoadGameTextures();

m_pGameSceneDataFile->LoadLocation(SimpleGameLocation, SimpleGameScenesPath);

//получение границ локации
ScrollGameSceneLeftLimit = -m_pGameSceneDataFile->m_fLocationHScrollLimit;
ScrollGameSceneRightLimit = m_pGameSceneDataFile->m_fLocationHScrollLimit;
//выставление границ локации, доступных из других модулей
g_fScrollGameSceneLeftLimit = ScrollGameSceneLeftLimit;
g_fScrollGameSceneRightLimit = ScrollGameSceneRightLimit;

//загрузка свойств объектов, границ
//LoadGameObjProperties(GameObjectPropertyValue); //поскольку закомментировано, то здесь пока не используется

}





Этот же метод нужно добавить в start.h

в описание класса

class CD3DGameApp

после строки

bool m_bShowScreenOptionsBtn;

добавим -





//игровая сцена

CGameSceneDataFile* m_pGameSceneDataFile;
void LoadGameScene();
//void AfterLoadRestoreLocTextures(); //закомментировано, т. к. пока не требуется
void MovePlayer(int NewMoveState);
void ScrollGameScene();

int m_iOldCurrSceneNum;
int m_iOldCurrSceneInx;

D3DXVECTOR3 m_vFleHeroPos;
void SetHeroLocationPos(DWORD CurrMoveState, LPD3DXVECTOR2 p_v2Pos,
float LocationXOffset);
void AnimGameProcess();
void DrawGameProcess();
bool CanEnterScene();
void LoadGameDataBlock();

}; //вышеуказанные строки надо добавить, а данная уже должна быть - служит для закрытия описания класса CD3DGameApp




Теперь снова возвращаемся к коду модуля start.cpp и добавляем туда

в метод

CD3DGameApp::CreateDeviceObjects

После строки -



g_Snow.Load();



строки -



LoadGameScene();

LoadGameSceneTextures(m_pGameSceneDataFile->m_pTexArray, EnvironmentTexturesPath, TextureFilesList, m_pGameSceneDataFile->m_pSprite);





в методе

CD3DGameApp::RestoreDisplayObjects

добавляем

if ( m_pGameSceneDataFile )
m_pGameSceneDataFile->RestoreGameSceneObjects();

в методе

CD3DGameApp::InvalidateDisplayObjects

добавляем

if ( m_pGameSceneDataFile )
m_pGameSceneDataFile->InvalidateGameSceneObjects();


в методе

CD3DGameApp::DestroyDisplayObjects

добавляем

m_pGameSceneDataFile->FreeGameTextures();
SAFE_DELETE(m_pGameSceneDataFile);



в любом месте, но удобнее в самом конце файла, добавляем -

void CD3DGameApp::MovePlayer(int NewMoveState)
{
/*
Если сцена закрыта - запрет движения
*/

m_pGameSceneDataFile->m_fHeroXPosInLocation = g_fHorizontalScrollOffset;
m_pGameSceneDataFile->CalcCurrentSceneNumber();
//if ( !CanEnterScene() )
//{
//x_step = 0.0f;
//}
}

//=============================================
//
// Скроллинг игровой сцены
//
//=============================================

void CD3DGameApp::ScrollGameScene()
{

//перед выполнением прокрутки локации запоминаем номер текущей сцены,
if ( m_iOldCurrSceneInx != m_pGameSceneDataFile->m_iCurrentSceneIndex )
{
m_iOldCurrSceneInx = m_pGameSceneDataFile->m_iCurrentSceneIndex;
m_iOldCurrSceneNum = m_pGameSceneDataFile->m_iCurrentSceneNumber;

g_iCurrentSceneNumber = m_pGameSceneDataFile->m_iCurrentSceneNumber;
}

m_pGameSceneDataFile->ScrollLocation( &D3DXVECTOR2(
g_fHorizontalScrollOffset + m_vFleHeroPos.x,
g_fVerticalScrollOffset ), g_fHorizontalScrollOffset);

}
//произвольное положение героя в локации
void CD3DGameApp::SetHeroLocationPos(DWORD CurrMoveState, LPD3DXVECTOR2 p_v2Pos,
float LocationXOffset)
{
m_vFleHeroPos = D3DXVECTOR3(p_v2Pos->x, p_v2Pos->y, 0.8f);

g_fHorizontalScrollOffset = LocationXOffset;
m_pGameSceneDataFile->m_SceneScrollPoint.x = g_fHorizontalScrollOffset;

ScrollGameScene();
}

void CD3DGameApp::AnimGameProcess()
{

m_pGameSceneDataFile->AnimateGameScene(g_fElapsedTime);
m_pGameSceneDataFile->AnimLocation();

MovePlayer(0);
}

void CD3DGameApp::DrawGameProcess()
{
m_pGameSceneDataFile->DrawGameSceneView();
m_pGameSceneDataFile->DrawLocation();
}

bool CD3DGameApp::CanEnterScene()
{
return true; //test
}

void CD3DGameApp::LoadGameDataBlock()
{
m_pGameSceneDataFile->m_SceneScrollPoint.x = g_fHorizontalScrollOffset;

if ( g_fHorizontalScrollOffset != 0.0f )
ScrollGameScene();
}





И наконец вызовы методов

AnimGameProcess();

и

DrawGameProcess();

Отвечающие за анимацию и отображение игровой сцены, нужно добавить в

метод

CD3DGameApp::FrameMove

g_AI_Ball_Sprite.Anim(); //это строка после которой надо добавить

AnimGameProcess();//это строка которую надо добавить



а в метод

CD3DGameApp::Render

case APPSTATE_READY: //это строка после которой надо добавить

DrawGameProcess();//это строка которую надо добавить



Сохраняем изменения, выполняем сборку проекта в MSVS 2005. Если всё ок, то при запуске приложения Вы увидите на экране созданную Вами в Scene Editor fge игровую сцену и прыгающий в ней шарик.

Отображение созданной игровой сцены приложением simple game

Пример данной будущей игры с полным исходным кодом Вы можете получить в составе платной подписки на fle game engine.

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

Оформить подписку на fle game engine -


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

Тогда вы получите более свежую версию Scene Editor fge 1.0.2 (на текущий момент) с поддержкой большего количества возможностей: сетка, настройки, скроллинг и другие. В бесплатной версии эти возможности не поддерживаются. подробнее о составе платной подписки.





Для корректной сборки проекта Вам потребуется Microsoft Visual Studio 2005

DirectX SDK August 2008



https://www.microsoft.com/en-us/download/details.aspx?id=23549
Details
Version:
9.27.1734
File Name:
DXSDK_Aug09.exe
Date Published:
9/8/2009
File Size:
553.3 MB




Чтобы проект можно было корректно скомпилировать выполните следующие действия:

Откройте проект из MSVS 2005

в окне Solution Explorer кликните правой кнопкой по узлу start - обозначающему имя проекта
и выберите пункт меню

Properties

свойства проекта

В открывшемся окне start Property Pages слева откройте узел

Configuration properties > C/C++ > General

свойства проекта Additional Include Directories

затем справа в поле Additional Include Directories

вместо ..\..\..\..\..\..\..\Include

вам нужно прописать корректный путь к папке Include, входящей в состав DirectX SDK August 2008.

Т. е. нужно заменить часть строки ..\..\..\..\..\..\..\Include

на абсолютный путь -

например он может быть таким -

C:\DXSDK9_Aug2008\Include

или относительный -

например он может быть таким -

..\..\..\..\..\..\..\..\..\Include



Аналогичное действие Вы должны проделать для Debug сборки - выберите в поле Слева вверху Configuration вариант Debug.

свойства проекта Additional Include Directories для Debug сборки

На вопрос Do you want to save changes you've made in the property pages ?

Отвечайте утвердительно - Да или Yes.



Далее откройте слева узел

Configuration properties > Linker > General

и в поле

Additional Library Directories

измените значение

..\..\..\..\..\..\..\Lib\x86

свойства проекта Additional Library Directories

на соответствующее вашему пути к установленному DXSDK9_Aug2008

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

C:\DXSDK9_Aug2008\Lib\x86

или относительный - зависящий от того где на диске расположена папка проекта simple_game.

Например он может быть таким -

..\..\..\..\..\..\..\..\..\Lib\x86

Указанное действие нужно проделать и для Debug конфигурации проекта.

выберите в поле Слева вверху Configuration вариант Debug.

На вопрос Do you want to save changes you've made in the property pages ?

Отвечайте утвердительно - Да или Yes.



Если всё настроено правильно. Нажимаем ОК.

Далее в поле под главным меню выбираем вариант сборки проекта Debug или Release в панели инструментов

чуть правее от кнопки с зеленым треугольником - означающим запуск проекта из среды MSVS 2005 в режиме отладки.

Далее в главном меню выбираем пункт Build > Clean Solution - чтобы очистить все устаревшие объектные файлы.

Затем Build > Rebuild Solution.

Если всё было настроено правильно и в ходе компиляции вы не получили никаких сообщений об ошибках, то в папке

simple_game\simple_game\

вы найдете созданный файл start.exe, который можно запускать на выполнение.



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



подробнее

Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 1

Предлагаем вашему вниманию онлайн-комикс Приключения Кости Коробкина - Как я провел лето.

Привет ! Меня зовут Костя Коробкин. Этим летом я гостил у бабушки на даче и там со мной случилась одна история...

онлайн-комикс Приключения Кости Коробкина - Как я провел лето страница 1

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

[страница 1] [страница 2] [страница 3] 

подробнее

     
  Веселый Буквоежка - игра  
     
 

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

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

 
     
  [содержание] [назад] [страница 1] [далее]  
     
  Введение в 2d-игры - страница 1  
     
 

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

Займемся мы созданием 2d игры на реальном примере игры - Веселый Буквоежка. Мы не только изучим теорию, но и увидим работающий код из работающей игры, а все желающие могут получить весь исходный код этой игры для работы над собственным игровым проектом.

О том как получить исходный код будет рассказано далее.

 
     
  Запускаем MSVS 2005 или выше - то, что у Вас есть под рукой.  
     
  Выбираем последовательно пункты меню File > New > Project  
     
  В открывшемся окне  
     
  создаем проект win32  
     
 

Выбираем пункты - в окошке Project Types:

Visual C++ > Win32,

в окошке Templates:

Win32 Project

 
     
 

Поля Name, Location, Solution Name заполняем именем проекта, указываем где сохранить проект нажав кнопку Browse...

и нажимаем OK

 
     
  описываем имя и расположение будущего проекта  
     
  Ждём некоторое время и вот - Среда разработки MSVS создает для нас шаблон проекта Win32 с именем Fle, искать его нужно в той папке, куда Вы указали его сохранить - проект будет окончательно создан в указанной папке после выполнения еще двух дополнительных шагов -  
     
 

Теперь в открывшемся новом Мастере Настроек проекта нужно задать некоторые опции -

В этом окошке Просто написано, что текущие настройки проекта выполнены для обычного Windows - приложения и нужно нажать кнопку Finish чтобы закрыть окно мастера, либо нажать кнопку Next чтобы увидеть еще некоторые опции

 
     
  окно мастера настроек проекта  
     
  Если хотите увидеть эти дополнительные опции - нажимайте Next  
     
  Менять ничего не нужно, просто нажмите Finish  
     
  Проект создан. Можете убедиться в этом сами - откройте указанную папку и увидите там множество созданных специальных файлов. В большинстве своем это обычные текстовые файлы, которые можно редактировать не только в Среде разработки MSVS, но и любым текстовым редактором, однако не всегда это следует делать, лучше всего делать это непосредственно в самой среде MSVS.  
     
 

Чем же так страшна эта MSVS и что же там такого в ней непонятного ? Об этом мы сейчас и поговорим.

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

 
     
 

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

Можно попробовать выполнить сборку проекта - Build > Build Fle, где Fle имя Вашего проекта, а затем попробовать запустить его на выполнение - прямо из среды MSVS - нажав кнопку Start Debugging на панели инструментов, либо выбрав пункт меню Debug > Start Debugging, либо перейдя в папку созданного проекта, в подпапку Debug - двойным щелчком на созданном файле с именем проекта и расширением EXE.

 
     
  кнопка Start Debugging на панели инструментов  
     
 

Созданное приложение основано на шаблоне Win32 и предназначено для обращения к функциям операционной системы посредством WinAPI.

Однако в реальных игровых приложениях Вам могут понадобиться классы MFC - Microsoft Foundation Classes. В частности, в примере нашей игры ВЕСЕЛЫЙ БУКВОЕЖКА широко будут применяться такие классы как CPtrArray, CWinApp и некоторые другие.

Для того, чтобы использовать MFC совместно с DirectX нужно совсем немного.

Попробуем сделать такое приложение. Закрываем созданный проект - File > Close Solution, если программа спрашивает о сохранении изменений - нажимаем Yes - иначе изменения в проекте не будут сохранены !!!

 
     
 

Делаем всё то же самое, что Вы делали до этого -

File > New > Project

Но далее уже выбираем MFC > MFC Application

 
     
  создание MFC приложения  
     
 

В появившемся окне Мастера настроек MFC - приложения нужно задать следующие опции -

в первом окне просто нажать кнопку Next

 
     
  во втором окне -  
     
  настройки проекта MFC  
     
 

Мы выбрали Dialog Based, потому что наше приложение, да и вообще все игровые приложения должны быть основаны на диалоговых окнах;

Use MFC in a static library - чтобы используемые библиотеки подключались к исполнимому файлу статично - без использования дополнительных DLL;

Resource language: Английский (США) - т. к. других вариантов не наблюдается;

Use Unicode libraries - для использования текстовых строк в формате Unicode

 
     
  В следующем окне уберите все флажки кроме Minimize box и System menu  
     
  В следующем окне уберите все флажки кроме Common Control Manifest  
     
  В последнем окне измените названия создаваемых классов или оставьте как есть  
     
  Ждём некоторое время и вуаля - шаблон приложения создан. Аналогично можно попробовать его собрать и запустить на выполнение - клавиша [F7] - сборка, [F5] - запуск на выполнение.  
     
  Как видим приложение работает достаточно просто - появляется соответствующее окно содержащее кнопки ОК и Cancel.  
     
  Изменив используемый шаблон окна диалога можно убрать всё лишнее и оставить только само окно, кроме того, желательно изменить стандартную иконку MFC приложения на Вашу собственную. О том как создавать иконку для приложения Мы уже рассматривали в уроке Изучаем и модифицируем пример CreateDevice - страница 3  
     
  Современные игры, например от таких издателей как Nevosoft и Alawar содержат специальную игровую оболочку, содержащую кнопки Старт, Купить, Другие игры и что-то еще в этом роде. В следующем уроке мы рассмотрим как быстро и просто реализовать свою собственную оболочку для игры ВЕСЕЛЫЙ БУКВОЕЖКА. Она будет выглядеть примерно так -  
     
  игровая оболочка  
     
     
     
     
  [содержание] [назад] [страница 1] [далее]  
     
подробнее

Шар Бумага Карандаш / Pencil Paper and the Ball PC game



Шар Бумага Карандаш / Pencil Paper and the Ball PC game скачать





Found a barrel Нашел бочку

Вот так бродил бродил и обнаружил бочку. Она может пригодиться ?
Пока неизвестно, но взять её можно.



cave пещера

Зашел я в пещеру, а там тьма-тмущая. Тут бы пригодился фонарь. Но его нигде поблизости не было.



box ящик

Еще предмет: ящик.

С виду он бесполезен, но если его сбросить с какого-нибудь возвышения, он
развалится на доски. А вот доски уже могут пригодиться...

Кстати сам ящик тоже пригодится может.

Поэтому я не стал спешить и разбивать его на доски. Вдруг правда пригодится.



quicksand зыбучие пески

Кстати надо быть осторожным ! Кругом болота или даже зыбучие пески.

В одном месте чуть было не засосало навеки. :))))



witch house избушка бабы яги

Бродил я по лесу, видел там даже грибы растут между елок.

И на тебе, наткнулся на избушку.

Избушка избушка. А кто там живет ? Баба Яга вестимо, кто ж еще то ?





big mushroom большущий гриб

Вот это гриб ! ГРИБИЩЕ !!!





big mushroom rain большущий гриб дождь

Стоял я любовался этим грибом и тут внезапно начался дождь.





occurence прибытие

Но долго скучать мне не пришлось. Дождь конечно кончился, я побрел далее и тут ...











Шар Бумага Карандаш: Каникулы Зеленого Шарика





Ну что ж. Вот они, Каникулы.

Но что-то уж очень сыро стало на просторах Планеты.
И часты дожди, а иногда и ливни.

Чьих же это рук дело ?

Думаю виноваты Карандаш и Бумага. Своими незадачливыми действиями
они могут нарушить баланс царивший в природе.

Или я ошибаюсь ?

Однако есть еще одно действующее лицо по имени АГЕНТ ВОДА.
Вода везде, вода повсюду. Да она ВЕЗДЕСУЩА !

Вот именно !

И это тот самый шпион, который был послан самой ПЛАНЕТОЙ БОЛ.

Он сумел влиться в воды ЗЕМНОЙ ВОДЫ и стать ЕЁ ЧАСТЬЮ.

Теперь он наблюдает за ВСЕМ ЧТО ПРОИСХОДИТ. И даже за ВАМИ !!!

Бойтесь его. ТРЕПЕЩИТЕ !

Однако им попался крепкий орешек. Бриджит - это не просто красотка.
Она оказалась еще и умна.

Она сумеет противостоять даже ВСЕЛЕНСКОМУ РАЗУМУ - В лице ПЛАНЕТЫ БОЛ.

Да да ! Красота в очередной раз спасет мир. И не только красота, но
и мудрость.

Так что же мы стоим ? Вперед ! Нужно помочь Бриджит предотвратить
необратимые последствия !!!



...
Где-то в чертогах властелина ПЛАНЕТЫ БОЛ.

- Я ни за что не поверю, что она просто взяла и сошла с обложки вот
этого журнала !

- Но это так повелитель.

- Хм. Красивая женщина опасна. Умная и Красивая опасна вдвойне.
Не мне тебя учить.

Да уж, попали мы в переплет, - подумал про себя ИСПОЛНИТЕЛЬ воли
ВЛАСТЕЛИНА БОЛ.





Шар Бумага Карандаш / Pencil Paper and the Ball PC game версия 10.07.2017 скачать







Системные требования:

Windows XP / 7 / 8 / 10
directx 9c
~ 760 Mb свободного места на носителе информации.

Размер самораспаковывающегося архива: 526 Mb

Контрольные суммы для проверки целостности скачанного архива:

CRC32: A98BFB5C
MD5: 71E4E4B1278CBA74795A19639E417D7A
SHA-1: 68A4928EADECCBE7D2371684AAC6F9894BECB638

     
 

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

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

 
     
 
Урок 4 Построение класса приложения
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 1] [далее] [к содержанию]
 
Из предыдущих уроков вы уже почерпнули некоторую информацию о том, как строится и функционирует типичное D3D-приложение. Эта информация является общей для всех приложений DirectX написанных как на C++, так и на Delphi. Разница лишь связана с синтаксическими особенностями данных языков программирования и средами программирования в которых происходит работа.
 
Здесь и далее мы познакомимся с основными особенностями Direct3D-приложения, которые необходимо учитывать при разработке его базового класса.
 
За основу мы возьмем класс CD3DApplication, рассмотрим и протестируем на конкретных примерах его особенности, а далее покажем класс, который используется в игре "Ну, Погоди!" и проведем небольшое сравнение.
 
С исходным кодом класса CD3DApplication вы можете познакомиться заглянув в модуль D3DApp.pas из папки common библиотеки delphi directx 8.1
 
Данный класс является абстрактным (также как и например TForm), поэтому нужно сначала создать производный класс от данного, а затем уже работать с новым созданным классом, используя его для своих целей, что и происходит во всех примерах из DirectX SDK.
 

CD3DApplication производится напрямую от TObject.

Основное назначение класса - обеспечение работы WinAPI-приложения с использованием также DirectX API, другими словами данный класс предоставляет удобный для работы интерфейс для вызова необходимых приложению интерфейсов Windows и главным образом интерфейсов DirectX.

 

Основные методы этого класса - это

Create

Destroy

Create_

Run

MsgProc

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

OneTimeSceneInit

InitDeviceObjects

RestoreDeviceObjects

FrameMove

Render

InvalidateDeviceObjects

DeleteDeviceObjects

FinalCleanup

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

 
В качестве основы для изучения данного класса и экспериментов с ним мы возьмем пример SwitchScreenModes
Скачиваний : 1
из предыдущего урока. Для экспериментов над кодом класса CD3DApplication советую Вам взять файл D3DApp.pas и его копию разместить внутри папки того проекта в котором Вы будете проводить эксперименты. При этом среда Delphi будет использовать локальную копию вместо копии из папки common, а Вы сможете проводить какие угодно изменения не вмешиваясь в оригинальный код D3DApp.pas
 
Класс приложения CD3DApplication функционирует абсолютно по тем же правилам, которые мы рассмотрели в предыдущих уроках.
 

Метод Create задает начальные значения для множества полей данного класса,

в частности запоминается ссылка на самого себя -

g_pD3DApp := Self;

задаются начальные размеры окна приложения

m_dwCreationWidth := 400;
m_dwCreationHeight := 300;

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

 
Данный метод - метод конструктора класса, вызывается при создании нового объекта данного класса и выполняет базовую начальную инициализацию заданных полей класса теми значениями, которые заданы в реализации данного конструктора, все остальные поля обнуляются или выставляются в nil (если это указатели)
 

Метод Destroy - метод деструктора класса, вызывается при удалении объекта класса. При этом освобождается память занятая объектом и связанными с ним ресурсами. Если таких ресурсов достаточно много и они занимают значительный объем, то выполнение метода может занимать значительное время - вспомните любую игру, в которую Вы играли в последний раз, почему игра по выходу из нее закрывается не сразу, а через некоторое время? Именно поэтому.

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

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

 
Особенностью данного метода является то, что он должен вызываться не напрямую, а посредством метода Free. Для этих же целей можно применять функции SAFE_DELETE и FreeAndNil
 

Метод Create_ - представляет метод начальной инициализации класса приложения. Его имя происходит от имени оригинального метода Create на C++. Но поскольку в языке Delphi для конструктора и деструктора применяются специальные имена (Create и Destroy), а в языке C++ имя конструктора и деструктора совпадает с именем класса, то данный метод и получил такое название. Знак подчеркивания обозначает, что данный метод именно метод инициализации, а не метод конструктора!

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

создается объект Direct3D, выполняется создание списка графических устройств, создается окно приложения (если требуется), задается стиль, границы окна и рабочей области, запускается DXTimer осуществляющий периодические процессы D3D-приложения - цикл подготовки кадра и цикл отрисовки, вызывается виртуальный метод OneTimeSceneInit осуществляющий однократную инициализацию, должен быть реализован в производном классе, поэтому его работа целиком зависит от того, как он будет реализован, наконец метод Initialize3DEnvironment выполняет окончательную инициализацию 3D-среды, главным образом создавая объект IDirect3DDevice8 на основе параметров, которые были получены на предыдущих этапах выполнения.

После этого приложение переходит в состояние готовности. Это означает, что начинаются периодические процессы, выполняющие циклическую работу:

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

метод MsgProc - представляет реализацию оконной процедуры приложения, которая отвечает за обработку поступающих в неё сообщений от системы. Эти сообщения играют важную роль, т.к. при помощи них и происходит собственно работа приложения в системе Windows. При каких-либо событиях, например, нажатии пользователем клавиши или перемещении мыши система реагирует на них и создает соответствующие сообщения. Эти сообщения попадают в очередь сообщений и если предназначены конкретному приложению имеющему фокус, то система передает их ему. Помимо описанных в качестве сообщений могут быть любые другие - достаточно заглянуть в код метода MsgProc и вы увидите как обрабатывается приложением сообщение об активации/деактивации приложения, реакция на команду окна меню и т.д.

 
Оставшиеся методы - OneTimeSceneInit, InitDeviceObjects, RestoreDeviceObjects, FrameMove, Render, InvalidateDeviceObjects, DeleteDeviceObjects, FinalCleanup

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

 

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

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

Методы RestoreDeviceObjects и InvalidateDeviceObjects также работают в логической паре. После инвалидации объектов их обязательно нужно восстановить, перед восстановлением обязательно инвалидировать. Иначе это опять же приведет к ошибкам. В этих методах нуждаются объекты, зависимые от текущего устройства. Если вдруг произошел его сброс, то происходит инвалидация, после чего нужно обязательно выполнить восстановление. К таким объектам относятся модели, шейдеры.

 

Метод FrameMove - исходя из названия "движение кадра" - отвечает за подготовку следующего кадра анимации. Как таковая отрисовка в нем не происходит. Его основное назначение - это вызов метода UpdateInput который выполняет опрос устройств ввода клавиатуры и мыши, а также выполнение всех необходимых вычислений, которые осуществляют перемещение персонажей, логику игры и прочее

От сложности процессов, происходящих внутри данного метода напрямую будет зависеть производительность приложения, потому что данный метод в паре с методом Render периодически вызывается таймером DXTimer через минимальные интервалы времени, чем и определяется FPS - частота кадров.

Метод Render - не должен содержать слишком "тяжеловесного" кода, т.к. его основная задача - как можно быстрее отрисовать то, что было подготовлено на предыдущей стадии. Для ускорения работы данного метода выполняются различные подготовительные стадии, в частности, отсечение объектов, не попадающих в поле зрения камеры. Правильное выполнение этого процесса (естественно внутри FrameMove, а не внутри Render) гарантирует то, что игра "не будет тормозить" даже при кажущемся большом количестве игровых объектов присутствующих в игровой сцене. Они просто будут исключаться из цикла отрисовки, если не попадают в определенную область видимости.

 
Итак, вкратце мы рассмотрели что к чему. Пора приступить к экспериментам. Под экспериментами я понимаю более углубленное изучение кода класса CD3DApplication. Мы будем брать части кода и комментировать их, исключая из компиляции, затем наблюдать результат полученный при этом. Этим методом не всегда, но очень часто можно лучше уяснить для себя как работает та или иная часть приложения. Кроме того, такие эксперименты будут крайне полезны Вам если у Вас еще не очень достаточно опыта в программировании игр и приложений вообще. Такие эксперименты позволят получить общее представление о методах тестирования и отладки кода.
 

Откроем пример SwitchScreenModes и копию модуля D3DApp.pas, которую Вы должны были скопировать из папки common в папку данного проекта

Открыть модуль D3DApp.pas достаточно просто - в коде модуля SwitchModesUnit.pas найдите имя D3DApp в списке uses и удерживая нажатой клавишу [Ctrl] щелкните по этому имени левой кнопкой мыши.

Модуль D3DApp.pas будет открыт для Вас. Чтобы удостовериться, что Вы действительно работаете с копией, а не с оригиналом из папки common, попробуйте выполнить сохранение. Если диалог укажет на папку проекта, а не на common, значит всё верно, можно смело приступать к экспериментам!

 

Для начала мы заглянем внутрь метода CD3DApplication.Create_ и выясним несколько фактов:

Как происходит построение списка адаптеров и какой видео режим выбирается по умолчанию - нам нужно будет поработать с кодом внутри BuildDeviceList

Какие особенности учитываются при реализации Initialize3DEnvironment для инициализации 3D-среды

 

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

{hr:= BuildDeviceList;
if FAILED(hr) then
begin
SAFE_RELEASE(m_pD3D);
Result:= DisplayErrorMsg(hr, MSGERR_APPMUSTEXIT);
Exit;
end;}

заключив его в фигурные скобки, выполним компиляцию, запустим приложение и посмотрим что произошло.

Мы получим Generic application error и приложение будет закрыто. Даже ничего не зная о функционале работы CD3DApplication из этого можно заключить, что данный код является критичным для работы приложения.

Раскомментируем код и отправимся вглубь метода BuildDeviceList для экспериментов внутри него.

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

 

Для быстрого перехода к реализацию BuildDeviceList также достаточно щелкнуть по этому идентификатору левой кнопкой мыши вкупе с клавишей [Ctrl].

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

 
 
Для этого щелкаем левой кнопкой мыши в указанной позиции и там появится красный кружок вместо синего (как на рисунке).
 
 
Запускаем приложение в режиме отладки кнопкой Run как показано на рисунке.
 

Для пошагового исполнения кода используем клавишу [F8]. Для входа в код вызываемых процедур и функций можно использовать [F7].

Параллельно можно исследовать содержимое переменных наблюдая как изменяются их значения.

Сначала мы наблюдаем как выбираются все видео- режимы чьё разрешение >= 640x480

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

Заносятся в список только имеющие уникальный формат текстуры, отсортировываются в порядке увеличения разрешения и качества формата текстур.

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

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

 

Какой режим выставляется по умолчанию?

Все видеорежимы попадают в поля структуры m_Adapters представляющей список адаптеров в системе. Каждый адаптер в свою очередь имеет список устройств, список видеорежимов, форматов и т.д.

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

m_Adapters[a].dwCurrentDevice := d;
m_dwAdapter := a;
m_bWindowed := True;

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

Для полного ответа на поставленный вопрос в методе Create_ попробуйте сразу после выполнения BuildDeviceList добавить такой тестовый код -

var

//**
cd: Cardinal;
//нужно объявить как глобальную переменную вне метода Create_
//**

{...}

//остальное уже в методе Create_

hr:= BuildDeviceList;
if FAILED(hr) then
begin
SAFE_RELEASE(m_pD3D);
Result:= DisplayErrorMsg(hr, MSGERR_APPMUSTEXIT);
Exit;
end;

//**
cd := m_Adapters[m_dwAdapter].dwCurrentDevice;
//**

 

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

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

var

//**
CurrentDevice, DeviceModeNum: Cardinal;
DesktopMode: TD3DDisplayMode;
p_AdapterInfo: PD3DAdapterInfo;
pDeviceInfo: PD3DDeviceInfo;
DeviceCurrentMode: TD3DModeInfo;
//**

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

//**
CurrentDevice := m_Adapters[m_dwAdapter].dwCurrentDevice;
DesktopMode := m_Adapters[m_dwAdapter].d3ddmDesktop;
p_AdapterInfo := @m_Adapters[m_dwAdapter];
pDeviceInfo := @p_AdapterInfo^.devices[CurrentDevice];
DeviceModeNum := pDeviceInfo^.dwCurrentMode;
DeviceCurrentMode := pDeviceInfo^.modes[DeviceModeNum];
//**

теперь всё сразу становится очевидно -

сначала определяется текущее устройство CurrentDevice, затем текущий режим рабочего стола (если это Вам потребуется), считывается информация о текущем адаптере, по ней определяется информация о текущем устройстве pDeviceInfo, затем считывается номер текущего видеорежима и определяются его параметры

 

Двигаемся дальше. Если будет обнаружено, что обработчик окна m_hWnd пуст, т.е. требуется создать окно средствами WinAPI, то оно будет создано. Иконка, указатель мыши, цвет фона, стиль, границы, размеры задаются далее.

Если обработчик окна не был пуст, то запоминается указатель на старую оконную процедуру и устанавливается новый, обрабатывающий поступающие сообщения внутри метода MsgProc, а также вызывающий старую оконную процедуру. Это гарантирует корректную обработку поступающих приложению сообщений даже при использовании VCL-окон и приложения работающего на основе TApplication, как это имеет место в примерах всех предыдущих уроков и игре "Ну, Погоди!". Если забыть про этот важный момент - при создании собственного базового класса D3D-приложения, то можно долго гадать о причинах возможных ошибок и некорректной его работы.

 

Метод OneTimeSceneInit целиком зависит от реализации его в производном классе.

Остается рассмотреть метод Initialize3DEnvironment и поэкспериментировать с ним.

 

Заглянув в первые строки кода данного метода сразу определяем, что текущий видеорежим это pModeInfo

вызов AdjustWindowForChange; на самом деле выполняет скрытие окна полноэкранного режима

Далее идет настройка параметров отображения и самое интересное, что служит ответом на второй вопрос, поставленный в конце 3 урока

// Create the device
{//**
hr := m_pD3D.CreateDevice(m_dwAdapter, pDeviceInfo^.DeviceType,
m_hWndFocus, pModeInfo^.dwBehavior, m_d3dpp,
m_pd3dDevice);
}

hr := m_pD3D.CreateDevice(m_dwAdapter, pDeviceInfo^.DeviceType,
m_hWndFocus,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
m_d3dpp,
m_pd3dDevice);

В чём же причина? Если заглянуть в документацию по DirectX 8 ,то в описании IDirect3D8::CreateDevice вы найдете список значений параметра BehaviorFlags

среди них D3DCREATE_PUREDEVICE = $10; и D3DCREATE_HARDWARE_VERTEXPROCESSING = $40; именно то значение, которое имеет данный флаг если использовать строку кода, которая показана закомментированной (зеленого цвета)

Приведенный чуть ниже код исправляет данный недостаток! Причина объяснена в документации по DirectX 8 -

D3DCREATE_PUREDEVICE
Specifies that Direct3D does not support Get* calls for anything that can be stored in state blocks. It also tells Direct3D not to provide any emulation services for vertex processing. This means that if the device does not support vertex processing, then the application can use only post-transformed vertices.

Т. е. установка данного флага не позволяет вызывать методы Get* и требует использования только пост-трансформированных вершин. Метод GetViewport как раз и не выдает при этом нужной информации!

 
оставшийся код располагает окно поверх остальных окон (если используется оконный режим), проверяются возможности устройства и формируется соответствующая информационная строка m_strDeviceStats, запоминаются параметры бэк-буфера, отображается указатель мыши и ограничивается его перемещение заданной областью, происходит вызов методов InitDeviceObjects и RestoreDeviceObjects, в случае ошибок происходит переключение на более низкий уровень возможностей графического устройства и рекурсивный вызов метода Initialize3DEnvironment.
 
По окончании выполнения метода Create_ приложение переходит в состояние готовности и запускается непрерывный цикл отрисовки вызывающий поочередно методы FrameMove и Render. Это происходит внутри метода TAppForm.ApplicationEventsIdle
 
 
 
[назад] [страница 1] [далее] [к содержанию]
 
 
     
     
     
     
megainformatic live chat
Начать беседу
X
 

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



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


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