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


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

megainformatic - Game craft - управление игрой от Direct Input в d3d9 - приложении
Game craft - управление игрой от Direct Input в d3d9 - приложении [все уроки game craft]  [моделируем scv]  [моделируем scv шаг 1 часть 2] [моделируем scv шаг 2 часть 3] [Прорисовка текстуры робота SCV шаг 5]  [экспорт робота scv в формат x]
подробнее...

Теги

создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт

Статьи сайта

роман 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

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Анимация прыжков шарика / How make the game - series of lessons - Animation ball jumps

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

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Вставка созданной графики, звуков и музыки в игру - Inserting created graphics, sounds and music in the game.

Balls on Lift / Шарики на лифте + Как создать игру - бесплатная игра + комплект уроков о том, как создавать контент для игры - спрайты, фоны, звуки, музыку, и вставить его в игру - How to create a game - free game + package of lessons on how to create content for the game - sprites, backgrounds, sounds, music, and insert it into the game

Balls on Lift / Шарики на лифте + Как создать игру - бесплатная игра + комплект уроков о том, как создавать контент для игры - спрайты, фоны, звуки, музыку, и вставить его в игру - How to create a game - free game + package of lessons on how to create content for the game - sprites, backgrounds, sounds, music, and insert it into the game

Развитие проекта fle game engine

Бинарная философия / Binary Philosofy

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

Вакансии

Коллекция php скриптов

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

megainformatic - Приключения Кости Коробкина - В гостях у тёти Светы часть 1 - интерактивный комикс

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс

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

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

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

megainformatic Создание и размещение видео баннера mp4

megainformatic Использование баннер-ротатора

megainformatic fle game engine Simple game / Пример простой игры

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

Creating game on fle game engine - Draw Line - This can be helpful/ Создание игры на fle game engine - Рисование линий - Это может пригодиться.

Платная подписка на fle game engine

megainformatic Создание игры на fle game engine - Simple game - страница 2 - Объекты / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 3 - Объекты / Пример простой игры

Платная подписка на fle game engine

megainformatic Создание игры на fle game engine - Simple game - страница 4 - Код - Настройка параметров Scene Editor fge и написание кода для вывода спрайта шарика в вашем первом игровом приложении / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 5 - Отображаем прыгающий шарик, узнаем как задается для спрайта его центр и знакомимся с векторной системой координат / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 6 - Загрузка игровой сцены / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 7 - Перемещения игровой сцены / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 8 - Закрываем часть сцены от пустот при помощи черной текстуры с прорезью, ограничиваем перемещение сцены / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 9 - Реализуем корректное попадание в ямы и около ям - определяем границы спрайтов ям и спрайта прыгаюшего шарика / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 10 - Проверка столкновений / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 11 - Игровой счёт, звуки, музыка / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game extended - страница 1 - Создание новой сцены (уровня, комнаты), добавление новых возможностей / Пример простой игры - расширенная версия

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

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

Советы копирайтеру - как не обмануть и не быть обманутым

Balls and Holes игра скачать + как создать игру на fle game engine

Balls and Holes игра скачать + как создать игру на fle game engine

Something: Unexplained 2 captive of desires

KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало

KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало

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

megainformatic - Игродельня

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

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

В секцию интерфейса добавьте полное описание класса TD3DGameApp -

TD3DGameApp = class(TD3DAbstractApp)
private
// fAppForm: TMainForm;

protected
FOldWndProc: Pointer;
m_strAppName: PChar;

// Internal variables used for timing
m_bFrameMoving: Boolean;
m_bSingleStep: Boolean;

m_dwWindowStyle: Cardinal;
m_rcWindowBounds: TRect; // Saved window bounds for mode switches
m_rcWindowClient: TRect;

m_DesktopMode: D3DDISPLAYMODE;
m_d3dfmtFullscreen: D3DFORMAT; // Pixel format for fullscreen modes

//m_bFullScreen, // Whether app is fullscreen (or windowed)
m_bIsActive, // Whether app is active

m_bMouseVisible: Boolean; // Whether mouse is visible

// DirectDraw/Direct3D objects

m_d3dpp: D3DPRESENT_PARAMETERS;

//m_UserInput: TUserInput; // Struct for storing user input

// Variables for timing
m_fFPS: Single; // Instanteous frame rate
m_strFrameStats: array[0..89] of Char; // String to hold frame stats


// Variables for timing
m_fTime: Single; // Current time in seconds

function OneTimeSceneInit(hWindow: HWND): HRESULT;
function FrameMove: HRESULT;
function Render: HRESULT;
function FinalCleanup: HResult;

function Render3DEnvironment: HRESULT;

// Input functions
procedure SetDefaultDefKeys;
procedure CreateInputObjects;
procedure DestroyInputObjects;
function UpdateInput: HResult;

// Display functions
function CreateDisplayObjects(h_Wnd: HWND): HRESULT;

function RestoreDisplayObjects: HRESULT;
procedure SetDefaultRenderStates;

function InvalidateDisplayObjects: HRESULT;
function DestroyDisplayObjects: HRESULT;

// Rendering functions
procedure ShowFrame;

// работа со звуком
//function CreateSoundObjects(h_Wnd: HWND): HRESULT;
//procedure DestroySoundObjects;

procedure Cleanup3DEnvironment;

public
m_fElapsedTime: Single; // Time elapsed since last frame

m_bPaused: Boolean;

fAspectRatio: Single;
m_dwScreenWidth, // Dimensions for fullscreen modes
m_dwScreenHeight: Cardinal;

m_hWndMain: HWND; // Main window

m_pd3dDevice: IDIRECT3DDEVICE8; // Class to handle D3D device
m_d3dCaps: TD3DCaps8; // Caps for the device

m_bDisplayReady: Boolean; // Whether display class is initialized

m_d3dfmtTexture: D3DFORMAT; // Pixel format for textures

m_light: TD3DLIGHT8;

m_dwAppState: TAppStates; // Current state the app is in

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

m_pGameFont: CD3DFont;//TD3DGameFont;

m_Camera: CD3DCamera; // Camera used for 3D scene

// DirectMusic objects
//m_pMusicManager: CMusicManager; // Class to manage DMusic objects

//AppRootDir: string;m_bShowFPSOn, bShowHelpText: Boolean;

//HardLevel: Integer; //уровень сложности игры

function Create_(hInstance: LongWord): HResult;
function Run: Integer;
function MsgProc(hWnd:HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
constructor Create;
destructor Destroy; override;
procedure WindowProcedure(var Message: TMessage); override;

//debug functions
procedure ShowFPS;

procedure CountFPS;

// Error handling
procedure CleanupAndDisplayError(dwError: Cardinal);


end;


 

В секцию реализации (implementation) добавьте реализацию всех описанных методов.

Строки помеченные данным цветом можно пока опустить

Лучше всего это делать по одному методу, тогда Вам легче будет отследить ошибки.

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

 

Например, находим в модуле Main.pas метод constructor TD3DGameApp.Create;

Копируем весь код реализации этого метода -

{ TD3DGameApp }

constructor TD3DGameApp.Create;
begin
inherited Create;

WindowProc := WindowProcedure;
FOldWndProc := nil;

m_strAppName := 'Nu, Pogodi!';
m_hWndMain := 0;
m_hWnd := m_hWndMain;
m_dwScreenWidth := 631;
m_dwScreenHeight := 380;
fAspectRatio := m_dwScreenWidth / m_dwScreenHeight;

m_bIsActive := False;
m_bDisplayReady := False;
m_bMouseVisible := True;

m_bFrameMoving := True;
m_bSingleStep := False;

m_dwAppState := asBeginInit;

m_pd3dDevice := nil;

m_pGameFont := nil;

m_Camera := nil;

m_bShowFPSOn := True;
bShowHelpText := True;

m_DXInput := nil;
m_bPaused := False;

//Area := -1;

{GameMode := gmRestart;
HardLevel := 3;

WinCartoon := nil;}
end;

и вставляем в код модуля формы TMainForm нашего проекта.

 
Код который пока не имеет отношения к нашим задачам нужно опускать.
 

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

Попробуйте откомпилировать приложение.

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

Например, класс TD3DGameApp является производным от TD3DAbstractApp, который в свою очередь нигде не объявлен.

Что же делать?

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

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

для среды Delphi 2006 выбрать пункты меню

Project > Options > Directories/Conditionals и в пункте Search Path указать абсолютные (или лучше относительные) пути к исходным файлам библиотеки Delphi DirectX например так

 
 
В этом примере папка common с исходным кодом библиотеки Delphi DirectX 8.1 располагается на три уровня выше папки с текущим проектом
 
Относительные пути удобнее тем, что если располагать нужные файлы библиотек и проектов внутри папок одной и той же корневой папки, то пути будут одни и те же в разных системах если копировать или формировать эту корневую папку целиком. Если же Вы укажете абсолютные пути, то для каждой системы Вам придется их каждый раз корректировать применительно к расположению папок внутри указанной системы.
 

Теперь остается подключить нужные модули из библиотеки в пункте uses нужной секции (интерфейса или реализации).

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

Если ставите ссылку на модуль в пункте uses секции интерфейса, то весь общедоступный (public) код этого модуля становится доступен как в интерфейсной, так и в реализационной части данного модуля проекта.

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

 

В нашем примере класс TD3DAbstractApp объявлен в модуле D3DAbstractApp.pas внутри папки common библиотеки Delphi DirectX.

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

 
 

Как узнать какие классы в каких модулях библиотеки Delphi DirectX найти?

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

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

Так например указанный тип TAppStates описан перед описанием класса TD3DGameApp как

// состояния в которых может находиться приложение
TAppStates = (asBeginInit, asInit, asEndInit, asReady, asGame);

 

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

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

Тогда код который Вы добавите из модуля Main.pas исходного кода игры "Ну, Погоди!" Вам станет ясен и всё встанет на свои места.

 

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

Как реализовать метод ApplicationEventsIdle ?

Для этого Вам достаточно добавить на форму окна компонент TApplicationEvents, назвать его например ApplicationEvents, он находится на вкладке Additional палитры компонентов Delphi 2006. Добавив его для него нужно создать событие OnIdle и вставить в него код из аналогично обработчка модуля Main.pas исходного кода игры "Ну, Погоди!".

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

Еще раз взгляните на реализацию метода

procedure TMainForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
begin
inherited;
Done:= True;

// Do not render if the app is minimized
if IsIconic(Application.Handle) then Exit;

// Update and render a frame
if g_d3dApp <> nil then begin

if g_d3dApp.m_bDisplayReady then
begin
g_d3dApp.Render3DEnvironment;
end;
end;

// Keep requesting more idle time
Done:= False;
end;

и на схему функционирования D3D-приложения -

 
 

Код создания необходимых объектов D3D добавлен и реализован внутри FormShow, код освобождения выделенных ресурсов также добавлен и реализован внутри FormDestroy. Код внутри UpdateInput, частично внутри FrameMove пока можно опустить.

Остается лишь метод Render3DEnvironment, а внутри него метод Render -

function TD3DGameApp.Render: HRESULT;
begin

// Render the scene based on current state of the app
case m_dwAppState of

asInit: ;

asReady: begin
//DrawGameView;
//ShowFrame;
end;

//asGame: DrawGameView;

end;

result := S_OK;
end;

 

Если Вы еще не поняли до конца что нужно сделать, тогда рассмотрим более детально как будет работать наше приложение.

Итак,

(для лучшего понимания ориентируйтесь по схеме и исходному коду)

program DelphiDirectXStartTemplate;

uses
Forms,
Main in 'Main.pas' {MainForm};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

Т. е. среда Delphi инициализирует приложение, создает его форму MainForm и запускает цикл прокачки сообщений (Run).

Во время показа формы (FormShow) будет вызван код этого метода. Внутри него как мы видим вызывается метод InitD3DApp

Он вызывает создание объекта класса TD3DGameApp и вызывает метод его инициализации Create_

Внутри данного метода происходит создание еще одного окна. Зачем?

Это связано с тем, что существуют два режима работы D3D-приложения: оконный и полноэкранный. Для каждого из них должно быть создано своё окно. Это указано также в английских комментариях к коду, которые были сохранены при конверсии примеров из DX SDK на C++.

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

Далее вызывается метод OneTimeSceneInit, внутри которого происходит создание объектов DirectX - Direct3D, Direct3DDevice и т.д. Там же происходит загрузка необходимых текстур, звуков, моделей, текста и прочего.

Но для нас сейчас важно не это. Важно, что в конце реализации данного метода приложение переходит в состояние -

m_dwAppState := asBeginInit;

Если посмотрим далее, в ту часть кода метода FrameMove, которую Вам нужно было оставить -

function TD3DGameApp.FrameMove: HRESULT;
begin
case m_dwAppState of
asBeginInit: begin
//LoadGameTextures;
//RestoreGameTextures;
m_dwAppState := asInit;
end;
asInit: m_dwAppState := asEndInit;
asEndInit: m_dwAppState := asReady;

asReady: {UpdateInput};
asGame: {FrameMoveGameScene};
end;

result := S_OK;
end;

Здесь состояние переходит в asReady. Текстуры и прочее мы пока опускаем из-за упрощенных задач, которые пока стоят перед нами.

Нам остается заглянуть внутрь метода Render -

function TD3DGameApp.Render: HRESULT;
begin

// Render the scene based on current state of the app
case m_dwAppState of

asInit: ;

asReady: begin
//DrawGameView;
//ShowFrame;
end;

//asGame: DrawGameView;

end;

result := S_OK;
end;

 

Здесь Вам остается раскомментировать строку //DrawGameView;

DrawGameView;

А далее, добавить описание и реализацию этого метода в класс TD3DGameApp -

описание -

protected

{...}

// Rendering functions

procedure DrawGameView;

{...}

реализация -

procedure TD3DGameApp.DrawGameView;
begin
if not Assigned(m_pd3dDevice) then Exit;

// Begin the scene
if SUCCEEDED(m_pd3dDevice.BeginScene) then
begin
// Erase the screen
m_pd3dDevice.Clear( 0, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER, $FF000000,
1.0, 0 );

//DrawGameScene;


//CountFPS;
// End the scene
m_pd3dDevice.EndScene;
end;


end;

 

Теперь Вам нужно скомпилировать Ваше приложение и попробовать его запустить. Если Вы получаете сообщения об отсутствии dll, значит Вы забыли поместить в папку с проектом файлы

D3DX81ab.dll

DXErr81ab.dll

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

 
 
Положение окна Direct3D (черная область) будет зависеть от того, как расположить компонент TPanel, который Вы добавили на форму.
 
Если расположить его во всю рабочую область окна, а цвет очистки задать другой, то можно получить следующий результат -
 
 
На рисунке также видно как задать в коде иной цвет заполнения рабочей области окна D3D-приложения.
 

Вы можете скачать исходный код шаблона D3D-приложения (17,2 Кб)

Скачиваний : 1

пригодный для работы с библиотекой Delphi DirectX 8.1 в среде Delphi 2006 и выше. Однако помните, что для компиляции и работы Вам обязательно потребуется код библиотеки Delphi DirectX 8.1 (папка с общим кодом common).

Ее Вы можете скачать на странице Delphi DirectX - что это такое?

 
 
 

В следующем уроке:

Мы познакомимся с тем, как создать меню окна приложения и обрабатывать его команды, а также реализуем некоторые из пунктов меню - [далее]

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

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



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


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