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


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

megainformatic - Веселый Буквоежка - онлайн комикс - страница 11
Веселый Буквоежка - онлайн комикс - страница 11 представляем Веселый Буквоежка - онлайн комикс. Теперь нужно позаботиться о поливе. Сегодня дождя, думаю, не будет.
подробнее...

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

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

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

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

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

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

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

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

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

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

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

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

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

megainformatic - megainformatic cms rs

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

megainformatic - проект Open Shop

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разное

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

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

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

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

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

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

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

megainformatic - Fruity Loops Studio 9 - Как синтезировать свои сэмплы - изучаем возможности плагина Sytrus

megainformatic - Видоизменяем тему для Wordpress под свои нужды

megainformatic - Flash приложения и игры - Шаг 3 - управляемый шарик

megainformatic - Учимся создавать флеш-игры, что нужно знать для того, чтобы заняться созданием flash приложений и игр ?

megainformatic - Шаг 4 в освоении Flash-технологий - как анимировать персонажа и управлять им

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

megainformatic - megainformatic cms express files + module slider

megainformatic - Создание сайта бесплатно или под заказ

megainformatic - Как создать flash баннер

megainformatic - Разработка flash-приложения для сайта: онлайн примерочная

megainformatic - Мои впечатления о книге - Владислав Крапивин - Журавленок и Молнии

megainformatic - Модуль отзывов/комментариев для вашего сайта

megainformatic - Модуль отзывов/комментариев для вашего сайта

megainformatic - Модуль отзывов/комментариев для вашего сайта

megainformatic - Модуль короткие ссылки short link

megainformatic - Работа с сокетами fsocket из php

megainformatic - Как создать игру Создание игровых панелей и индикаторов

подробнее

       
 Урок 3: Введение в трэкерскую музыку.Об электронной музыке и трэкерах. 
    
 

Во времена MS-DOS для создания музыки можно было воспользоваться достаточно мощной, но небольшой по размерам программой - музыкальным трэкером Impulse Tracker 2.14. Прошло время, появились Win9x. Однако новых трэкеров для них никто не писал. Зато были написаны программы для адаптации работы Impulse Tracker под Win9x (такие как VDMS). Почему появились эти программы? Если под Win95 еще как-то можно было добиться работы Impulse Tracker'a. Под Win98 и выше - тоже можно. Но с появлением WinXP и особенно новых спецификаций памяти работа в Impulse Tracker 2.14 даже с программой-адаптером стала невозможной. Он просто не может использовать ту спецификацию оперативной памяти, которая установлена в современном ПК. На некоторых моделях ПК проблем нет, а вот на других... Кроме того, интерфейс программы достаточно старый (практически не ориентированный на мышь). Поэтому встал вопрос о создании новых трэкеров.

Нашлись люди, которые не пожалев своих сил и времени, создали бесплатно распространяемый трэкер. Такой как ModPlug Tracker 1.16.

На сегодняшний день это лучший аналог Impulse Tracker 2.14! Кроме того, этот трэкер без проблем работает под Win9x и WinXP.

Impulse Tracker 2.14 - одна из последних версий легендарного трэкера под MS-DOS, автор Jeffry Lim (Австралия). Программа достаточно старая (с точки зрения даты выхода) - 1997 год. Но никоим образом не потерявшая своей актуальности!!! Существует целое движение трэкерщиков - людей пишущих музыку в трэкерах (Impulse Tracker, Scream Tracker, Fast Tracker и других).

Impulse Tracker очень компактен, т.к. полностью 100% написан на ассемблере. Недостатком является то, что он привязан к конкрентным моделям звуковых карт, в связи с чем ему для них нужны свои драйвера.

 
    
 

Как создается трэкерская музыка? В трэкере музыка состоит из паттернов и сэмплов. Сэмплы несут образцы звуковых инструментов (оцифрованные или синтезированные искусственно). Паттерны - это нотные страницы состоящие из определенного количества строк (например 64) и столбцов - каналов. Каждый канал - это отдельная звуковая дорожка (трэк). Отсюда и пошло название трэкеры! В каждой дорожке может (независимо от других) играть партия какого-либо инструмента (или сменяющих друг друга инструментов - сэмплов). Для того, чтобы паттерны проигрывались не строго один за другим, а в любом произвольном порядке существует понятие Order List (список воспроизведения паттернов). В этом списке по-порядку записаны номера паттернов так, как они будут последовательно проигрываться.

Как возникла трэкерская музыка? Если Вы что-нибудь слышали о программах Impulse, Scream или Fast Tracker, то знайте - это именно те программы, в которых создается трекерская музыка. Своему возникновению она обязана именно этим программам. Существовало и существует еще и масса других трэкеров. Один из таких - ModPlug Tracker (автор Оливье Лаписку) - является достойным продолжателем лучших трэкерских традиций.
 
    
 

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

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

 
    
 

Сразу после того, как Вы скачали архив с ModPlug Tracker и проверили его на вирусы :o))) Вам нужно просто распаковать его содержимое в какую-либо папку и приступить к изучению.

Пробуем запустить Tracker. Предполагается, что вы установили его, например в папку c:\audio\mpp

Найдите в этой папке файл mpp.exe и запустите его.

 
 

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

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

Получаемые в трэкере композиции достаточно компактны даже по сравнению с форматом mp3! Почему? Формат mp3 хранит лишь сжатую информацию о звуковой волне. Нотная информация в нём - непрерывно сменяющие друг друга звуковые волны. Все каналы (кроме естественно стерео каналов - левого и правого) сведены в один (моно) или 2 (стерео). В трэкере компактность достигается за счёт: хранения только образцов звуков (сэмплов) - это кусочки звука, проигрывая которые с разной частотой дискретизации, дают всё многообразие нот; сама композиция хранится в виде нот в паттернах.

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

Итак, такая музыка и компактна и может воспроизводиться многими плеерами, включая WinAmp, а также может использоваться для озвучки компьютерных игр. Смотри пример в игре "Дорога в Город".

 
    
 Для воспроизведения паттернов в произвольном порядке имеется список воспроизведения. Этот список хранит позицию (по-порядку) и номер паттерна звучащего в этой позиции. Этим и достигается произвольная игра.Что может и чего не может обычный трэкер. Запомните, что трэкер применяется для создания композиции из уже готовых сэмплов! Сэмплы - это образцы звуков музыкальных инструментов. Создаются в какой-либо отдельной программе для записи и синтеза звуков - например Sound Forge. Получаемые в Sound Forge звуки можно записать в формате *.wav. Это и будут исходные сэмплы готовые для загрузки в трэкер. 
    
 

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

Однако трэкер никогда не используется для синтеза или записи сэмплов!  
    
 

Если Вам позарез необходимы хоть какие-то более-менее сносные сэмплы для написания собственной музыки (мол душа требует!), а под рукой нет ничего подходящего, то обратитесь к трэкеру ModPlug Tracker 1.16.

 

Этот трэкер позволяет создавать композиции в формате midi и использовать сэмплы табличного генератора звуковой карты (Midi Library, GM.DLS) и использовать их в качестве обычных сэмплов!
 
     
 Mod Plug Tracker 1.16 - это прямой и один из лучших продолжателей традиций Scream, Impulse и Fast -трэкеров. К тому же он без проблем работает под Win9x, WinXP!

Итак, пришло время Вам определиться с выбором трэкера и заняться созданием собственной музыки!

 
    
 Скачайте же или запустите (если он у Вас уже есть) Mod Plug Tracker 1.16 и мы приступим к изучению основ создания трэкерской музыки!

Теперь можно двигаться дальше!

 

 
    
  [Предыдущий урок] [Следующий урок] [Все уроки]  
подробнее

Без названия

Игригия - это такая новая религия. Игро-религия.

Там верят в игры и их могущество.

Правда я всего лишь сторонний наблюдатель, мне чужда эта игригия.

Зато я могу более объективно рассказать о ней, не так ли.

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

Итак, кто такой игроман ?

Тот кто много и долго играет в игры.

Его буквально засасывает.

А вот кто такой поклонник игригии ?

Точнее её служитель ?

Да да, именно тот, кто их делает.

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

Говорить о нем принято лишь в финальных субтитрах, которые почти никто и не читает.

Кому они интересны ?

Объективно интересны сами игры, а не их создатели.

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

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

Это его работа, а работу мы вынуждены терпеть большую часть жизни.

Остальное отдаем самому увлекательному и интересному.

Суть игригии - что игры - это способ бытия, способ понимания реальности
и её освоения, познания.

Это инструмент, если хотите, при помощи которого видоизменяется реальность.

И она уже не выглядит такой суровой.

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

Как космос или жизнь или вселенная.

Но не бывает правил без исключений.

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

Это уже не мэйнстрим, а новое русло и новый поток.

Пусть даже ручей.

Но о нём уже кто-то знает и черпает из него энергию.

Энергию или идеи. Возможно что-то еще. Главное не увлекаться.

Хорошего по-маленьку.

Чуть чуть.

Кстати, не обязательно верить в игры и их могущество.

Но реальная жизнь - не это ли одна из моделей очередной большой БОЛЬШОЙ ИГРЫ
вселенского ВСЕЛЕНСКОГО масштаба ?

Тут есть и свои еретики и даже инквизиция.

Опасности, которые подстерегают на каждом шагу.

Однако главное это оставаться самим собой.

Тогда все или многое можно преодолеть.

Игригия. Только чуть-чуть.

подробнее

     
 
Урок 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 Кб)

[downloads:9]

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

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

 
 
 

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

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

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

Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний



read paper in english

Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний

выпуск 67 Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний







Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний

Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний



180 Mb

probe version / пробная версия

сделано на fle game engine

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

CRC32: C3C48872
MD5: 666313BEF9D10E20BEF99063E885540B
SHA-1: 099A99BC98A4481245C59CACB473FD0384DF6EFE

Пробная версия также включает утилиту Coords2D и небольшой набор уроков для создания дополнений игры.

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

Подробнее о fle game engine
fle game engine

Скачать игру Шар Бумага Карандаш / Pencil Paper and the Ball PC game + Something: Unexplained 2 captive of desires версия 02.06.2017



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

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

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

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

CRC32: 4FA6DC82
MD5: B7F70552AC571C88B2365D540650F657
SHA-1: 1B32D5691641CA05F5257203B3BF53F99A8A210A

Подробнее о игре Шар Бумага Карандаш / Pencil Paper and the Ball PC game

сделано на fle game engine

something: unexplaned 2 captive of desires main title
something: unexplaned 2 captive of desires loading screen
something: unexplaned 2 captive of desires summer girl
something: unexplaned 2 captive of desires winter dreams
something: unexplaned 2 captive of desires summer girl 2
something: unexplaned 2 captive of desires summer girl
something: unexplaned 2 captive of desires summer girl
something: unexplaned 2 captive of desires winter dreams
something: unexplaned 2 captive of desires 2 girls
something: unexplaned 2 captive of desires summer girl
something: unexplaned 2 captive of desires winter dreams
something: unexplaned 2 captive of desires summer girl 2
something: unexplaned 2 captive of desires summer girl
something: unexplaned 2 captive of desires winter dreams
something: unexplaned 2 captive of desires main menu
megainformatic live chat
Начать беседу
X
 

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



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


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