Сегодня
22 октября 2017
2:00
Вход Sign In Регистрация Sign Up Забыли пароль ? Forgot password ?
Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008 - Урок 1 Основные операторы языка C++
  Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008
подробнее...

Теги

сайты, игры, дизайн, продвижение, php, html, css, my sql, c++, delphi, photoshop, 3ds max, fl studio, трекерская музыка, уроки

Статьи сайта

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

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

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

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

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

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

Создание сайта для бизнеса

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

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

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

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

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

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

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

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

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

Новый взгляд на очевидные вещи

Разработка программ на c++

Немного о музыке

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

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

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

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

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

GET и POST запросы

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

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

Темы для WordPress

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

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

скачать megainformatic cms

для чего нужна карта сайта

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

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

новые идеи, новые решения

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

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

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

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

Мысли о разном

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

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

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

Краеугольная особенность работы Web-form на примере смены состояния checkbox

Технологии WEB

Технологии WEB - AJAX-запросы

Легко ли быть программистом

От идеи к реализации - трудно ли создавать сайты ?

Проблемы с кодировками при отображении страниц

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

Система Автоматизации Доставки Электронных Заказов megainformatic cms e-pro

megainformatic cms e-pro Автоматизация Обработки Уведомлений о Заказах по партнерским программам

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

VARVE: Музыкальная страничка трэкера

Создание музыки и звука

VARVE: Создание музыки и звука: урок 2

Создание музыки и звука: урок 3 - настройка Impulse Tracker для работы в WinXP

Создание музыки и звука: урок 4 - Введение в Mod Plug Tracker

Создание музыки и звука: урок 5 - Первая композиция в Mod Plug Tracker

Создание музыки в Impulse Tracker 2.14 - урок 6 - Ввод Нот

Создание музыки в Impulse Tracker 2.14 Первая мелодия

Создание музыки в Impulse Tracker 2.14 Настройка параметров сэмплов

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

Что такое VARVE ?

Основы работы в Microsoft Visual Studio 2008 и DirectX 9 (DX SDK Aug 2008)

Введение в программирование игр на С++ для платформы DirectX 9 - Первый старт

Введение в программирование игр на С++ для платформы DirectX 9 - Меняем иконку приложения

Введение в программирование игр на С++ для платформы DirectX 9 Добавляем другую модель

Введение в программирование игр на С++ для платформы DirectX 9 Программирование игр в directx. Hello, World!

Введение в программирование игр на С++ для платформы DirectX 9 Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008

Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008 - Урок 1 Основные операторы языка C++

Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008 - Урок 1 Основные операторы языка C++ (часть 2)

Урок 2 Написание Win32-приложений. Обзор стартового кода Win32-приложения. Добавление ресурса текстовая строка

Урок 3 Создание Win32-приложений. Создание меню и простых диалоговых окон.

Урок 4 Создание Win32-приложений. Стандартные диалоги. Изучение сопутствующих конструкций языка. Консольные Win32-приложения. Указатели. Ссылочный тип. Массивы.

Урок 4 часть 2 Win32. Диалог выбора цвета, смена цвета фона окна приложения

Написание приложения DirectX9c + MFC в среде MSVS 2005

Создание компьютерных игр на основе DirectX в среде Delphi 6, 7

Создание компьютерных игр на основе DirectX в среде Delphi 6, 7 - Почему избраны DX8 и Delphi ?

Основы IDirectMusic8 в среде Delphi6-7

Основы DirectInput8 в среде Delphi 7

Основы DirectSound8 в среде Delphi6-7

Плагин для 3DS MAX из DX9 SDK

Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2)

Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 2

Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 3

Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 4

Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 5

Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 6

Система управления сайтом - megainformatic cms e-shop

Моделируем девушку в 3ds max - Женская грудь

Моделируем девушку в 3ds max - Тело

Уроки 3ds max - Введение в 3ds max

ГАЛЕРЕЯ 3D-моделей

СОЗДАНИЕ МАКЕТА ПОМЕЩЕНИЯ

Создание макета помещения - этап 2

МОДЕЛИРОВАНИЕ НА УРОВНЕ МНОГОУГОЛЬНИКОВ

СОЗДАНИЕ ПРЕДМЕТОВ ОБСТАНОВКИ ПОМЕЩЕНИЯ

Моделирование обстановки помещения

Создание модели автомобиля

Создание текстурной развертки для модели автомобиля

Создание анимации вращающихся колес автомобиля

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

Основы 3D-анимации, экспорт скелетной анимации

Подготовка модели к использованию скелетной анимации

Продолжаем Создание скелета для данной модели

Построение ирерархических связей между объектами и основы 3d анимирования

Особенности экспорта моделей и анимации экспортером kWXPort080719 из 3ds max 2009 

Создание модели броневика (Хэд)

megainformatic cms e-mailer

Моделируем девушку в 3ds max - Моделируем руку

Моделируем девушку в 3ds max - Кисть руки

Бесплатная Система Управления Вашим Сайтом - megainformatic cms free

Путешествие в мир 3d

Путешествие в мир 3d - страница 2

Путешествие в мир 3d - страница 3

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

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

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

 
     
  [содержание] [назад] [страница 4] [далее]  
     
  Введение в 2d-игры - создаем заставку для игры  
     
  Итак, мы создали основу нашей будущей игры. Теперь займемся изучением принципов вывода и использования статичных и анимированных изображений из файлов jpg и tga на примере вывода титульной заставки игры.  
     
  пример вывода титульной заставки игры  
     
 

Помимо этого мы рассмотрим как создать класс приложения и все необходимые для работы дополнительные классы, в частности мы покажем объявление классов:

CGameAppLoader

CD3DGameApp

и рассмотрим как применяется класс

CD3D9Sprite для работы со спрайтами и статичными 2d-изображениями.

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

Классы CGameAppLoader, CD3DGameApp объявляются в заголовочном файле Fle.h

Класс CD3D9Sprite полностью реализован в модулях D3DGUI.h и D3DGUI.cpp и представляет класс для использования 2d-изображений и спрайтов в d3d-приложениях и играх, полностью его код Вы найдете в исходном коде, если закажете ПОЛНЫЙ ИСХОДНЫЙ КОД игры Веселый Единственный Буквоежка за 200 рублей.

 
     
 
 
 
     
  Здесь и далее мы рассмотрим код указанных классов только с точки зрения необходимых нам для решения задач данного урока возможностей, если Вы хотите увидеть их ПОЛНЫЙ ИСХОДНЫЙ КОД - закажите его.  
     
  Параллельно мы коснемся основ использования DirectInput8, т. к. он на понадобится для управления нашей игрой.  
     
 

В модуле Fle.h

в самом начале файла после строки -

#include "resource.h" // main symbols

набрать следующий код -

#include <d3d9.h>
#include <d3dx9.h>

#include "D3DGUI.h"
#include "diutil.h"

#include "AdventureGame.h"

#include "d3dfont.h"

описать возможные состояния загрузчика -

// загрузчик


enum LOADINGSTATES{
LOADSTATE_BEGINSTARTLOGO,
LOADSTATE_STARTLOGO,
LOADSTATE_ENDSTARTLOGO,

LOADSTATE_BEGINMENU,
LOADSTATE_MENU,
LOADSTATE_ENDMENU,

LOADSTATE_BEGINADVENTUREINTRO,
LOADSTATE_ADVENTUREINTRO,
LOADSTATE_ENDADVENTUREINTRO,

LOADSTATE_BEGINLOADADVENTUREGAME_LOCTEX,
LOADSTATE_ADVENTUREGAME_LOCTEX,
LOADSTATE_ENDADVENTUREGAME_LOCTEX,

LOADSTATE_BEGINLOADADVENTUREGAME_CREATURE,
LOADSTATE_ADVENTUREGAME_CREATURE,
LOADSTATE_ENDADVENTUREGAME_CREATURE,

LOADSTATE_BEGINLOADADVENTUREGAME_SUBJECTS,
LOADSTATE_ADVENTUREGAME_SUBJECTS,
LOADSTATE_ENDADVENTUREGAME_SUBJECTS,

LOADSTATE_BEGINLOADADVENTUREGAME_SUBJECTS_PLATES,
LOADSTATE_ADVENTUREGAME_SUBJECTS_PLATES,
LOADSTATE_ENDADVENTUREGAME_SUBJECTS_PLATES,

LOADSTATE_BEGINLOADADVENTUREGAME_SUBJECTS_PLATES_LETTERS,
LOADSTATE_ADVENTUREGAME_SUBJECTS_PLATES_LETTERS,
LOADSTATE_ENDADVENTUREGAME_SUBJECTS_PLATES_LETTERS,

LOADSTATE_BEGINLOADADVENTUREGAME,
LOADSTATE_ADVENTUREGAME,
LOADSTATE_ENDADVENTUREGAME

};

и сам загрузчик -

class CGameAppLoader
{
public:
CGameAppLoader();
~CGameAppLoader();
//поля и методы загрузчика

CPtrArray* m_pLoaderTexturesArray;

void Start(CPtrArray* TxArray, LPCTSTR TexFilesPath, LPCTSTR TexFilesListTxt);
void LoadingProcess(CPtrArray* TxArray, LPCTSTR TexFilesPath,
LPD3DXSPRITE pSprite = NULL);
void LoadingResProcess(CPtrArray* TxArray, LPCTSTR TexFilesPath,
LPD3DXSPRITE pSprite);
void LoadingLtProcess(CPtrArray* TxArray, LPCTSTR TexFilesPath,
LPD3DXSPRITE pSprite = NULL);
void End();
void NextLoadStage();


//вывода ротора

float m_fRotorAngle;

void LoadLoaderTextures();
void DrawLoaderScreen();

void RestoreLoaderScreen();
void InvalidateLoaderScreen();
void FreeLoaderTextures();
void AnimateRotor();


void RenderLoaderText();


LPD3D9FONT m_pLoaderFont_2d;
void CreateFont_2d();
void FreeFont_2d();
void RestoreFont_2d();
void InvalidateFont_2d();
void RenderLoaderText_2d();


void Load1GameTexture(CPtrArray* TxArray, LPCTSTR TexFilesPath,
int* CurrentFileIndex, LPD3DXSPRITE pSprite);
void Load1GameTextureRes(CPtrArray* TxArray, LPCTSTR TexFilesPath,
int* CurrentFileIndex, LPD3DXSPRITE pSprite);
void Load1LetterPlate(CPtrArray* TxArray, LPCTSTR TexFilesPath,
int* CurrentFileIndex, LPD3DXSPRITE pSprite);


void OpenGameTexturesListFile(/*CPtrArray* TxArray, */LPCTSTR TexFilesPath,
LPCTSTR TexFilesListTxt);
void CloseGameTexturesListFile();

CStdioFile* m_pTextFile;

//статистика загрузки
int m_iCurrentIndex;
float m_fLoadingProgressStep;
float m_fLoadingProgress;
int m_iFilesNum;
TCHAR m_sTexFileName[MaxPath2];
char m_chTexFileName[MAX_PATH];

//смена загружаемых ресурсов
DWORD m_dwLoaderState;

void Loading();
int CountNumberOfFiles();

float m_fRotateProcessTimeCounter;


};

после строк -

//название приложения
#define GameAppName L"Веселый Буквоежка"

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

#define ParamDelimeter ';'

#define GAMEERR_NOINPUT 0x00000006
#define GAMEERR_OUTOFMEMORY 0x00000007


// файл списка текстур загрузчика
#define TexturesPath L"\\Media\\textures\\"
#define LoaderTexFilesPath L"\\Media\\textures\\initial\\"
#define LoaderTexFilesTxt L"\\Media\\textures\\initial\\loader_texlist.txt"

#define LoaderFontFileName L"\\Media\\fonts\\BALTICA.TTF"
#define LoaderFontHeight 18
#define LoaderFontWidth 10
#define LoaderFontRescaleCorrect 1.0f

#define LoaderFont2DFileName L"\\Media\\fonts\\MSSansSerif.tga"
#define LoaderFont2DFileName_CoordData L"\\Media\\fonts\\MSSansSerif.dat"

#define LoaderBackTexIndex 0
#define LoaderRotorTexIndex 1
#define LoaderStatorTexIndex 2

#define RotateProcessTimeLimit 0.01f

#define RotationStep D3DX_PI * 0.1f

#define RotationSpeed 3.0f

//ресурсы стартовой сцены (логотип, заставка, начало)
#define StartupLogoFilesPath L"\\Media\\textures\\startlogo\\"
#define StartupLogoTexFilesTxt L"\\Media\\textures\\startlogo\\start_texlist.txt"

объявляем класс CD3DGameApp -

 

class CD3DGameApp
{

public:

HWND m_hWndMain;

DWORD m_dwScreenWidth; // разрешения для полноэкранных режимов
DWORD m_dwScreenHeight;

float m_fResolutionRescale;

bool m_bIsActive; // активность приложения
bool m_bDisplayReady; // признак инициализации класс устройства отображения

FLOAT fAspectRatio;

BOOL m_bMouseVisible; // видимость указателя мыши

DWORD m_dwAppState; // текущее состояние приложения
DWORD m_dwAppStateAfterLoad; // состояние после завершения экрана
// загрузки

// Объекты Direct3D

LPD3DXSPRITE m_pSprite;

bool m_bShowFPSOn;

bool m_bPaused;

float m_fElapsedTime;


CD3DGameApp();

HRESULT FrameMove();
HRESULT Render();

CGameAppLoader* m_pLoader; //загрузчик игровых ресурсов

public:
void GetStrParam(CString* aCurrentStr,
int *aCurrentCharNum, CString* ParamStr);

void ReadFileParam(const CString* ParamStr,
CString* Name, D3DXVECTOR3* Pos, D3DXVECTOR2* Scale, bool* bAnimParam = NULL,
int* Width = NULL, int* Height = NULL, int* TexOffsetX = NULL,
int* TexOffsetY = NULL, int* FramesPerLine = NULL, float* fMaxFrame = NULL,
float* Delay = NULL);

void LoadGameTextures(CPtrArray* TxArray, LPCTSTR TexFilesPath,
LPCTSTR TexFilesListTxt);

void FreeGameTextures(CPtrArray* TxArray);


void CleanupAndDisplayError(DWORD dwError);

void Cleanup3DEnvironment();

HRESULT InvalidateDisplayObjects();
HRESULT DestroyDisplayObjects();
HRESULT RestoreDisplayObjects();

void CalcResolutionRescale();

//поля и методы стартовой сцены (логотип, название, начало)

CStartLogo* m_pStartLogo;

void LoadStartRes();

//поля и методы меню

CGameMainMenu* m_pGameMenu;

void LoadMenuRes();

//поля и методы игрового режима Приключение

CIntroComics* m_pIntroComics;
void LoadIntroComics();

CAdventure* m_pAdventure;
void LoadAdventure();
void ContinueAdventure();


// Функции ввода
HRESULT CreateInputObjects();
void DestroyInputObjects();
void UpdateInput( UserInput* pUserInput );

// Объекты DirectInput
CInputDeviceManager* m_pInputDeviceManager; // Класс для управления устройствами // // DInput
DIACTIONFORMAT m_diafGame; // Формат действий для геймплея

UserInput m_UserInput; // структура для хранения ввода от пользователя

HRESULT InputAddDeviceCB( CInputDeviceManager::DeviceInfo* pDeviceInfo, const DIDEVICEINSTANCE* pdidi );
static HRESULT CALLBACK StaticInputAddDeviceCB( CInputDeviceManager::DeviceInfo* pDeviceInfo, const DIDEVICEINSTANCE* pdidi, LPVOID pParam );
BOOL ConfigureInputDevicesCB( IUnknown* pUnknown );
static BOOL CALLBACK StaticConfigureInputDevicesCB( IUnknown* pUnknown, VOID* pUserData );


void PlayGameSound(int Index, CPtrArray* SoundsArray);
HRESULT LoadSoundList(CPtrArray* SoundsArray,
LPCTSTR SoundsResourcePath, LPCTSTR SoundFilesList);
void FreeSoundList(CPtrArray* SoundsArray);

HRESULT CreateSoundObjects();
void DestroySoundObjects();

void TestGlobalAppState();

};

__declspec(selectany) CD3DGameApp g_d3dApp;

 
     
  Я намеренно не привожу здесь все комментарии, многое Вам будет понятно исходя из дальнейшего изучения кода. Код приведенный выше мы частично реализуем, остальное при желании Вы найдете в ПОЛНОМ ИСХОДНОМ КОДЕ игры.  
     
 

Чтобы не пугать Вас обилием кода на данной странице отсылаю Вас к ПОЛНОМУ ИСХОДНОМУ КОДУ.

Здесь мы рассмотрим как выводится 2d-изображение на экран.

 
     
 

Вот фрагмент кода из метода void CStartLogo::DrawIntroStoryBackScreen()

LPD3D9SPRITE spr = GetElement(IntroStoryScreen); //получаем объект спрайта по его // //индексу IntroStoryScreen

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

//это выполняется здесь

D3DXVECTOR2 pt1;
Vector2Screen(&D3DXVECTOR2(
m_fIntroScr_x1,
IntroScr_y1),
&pt1);

pt1.x *= spr->m_fResolutionRescale; //пересчетный коэффициент применяется для // // // //корректного вывода
pt1.y *= spr->m_fResolutionRescale;

// выводим 2d-изображение в указанную позицию x, y, z; x и y - пиксельные координаты, // но представленные типом float; с данным масштабом xScale, yScale и с данной // // // // полупрозрачностью alpha

spr->Draw2(pt1.x, pt1.y, spr->m_Position.z,
spr->m_Scale.x * spr->m_fResolutionRescale,
spr->m_Scale.y * spr->m_fResolutionRescale,
spr->Alpha );

 
     
  Но прежде нужно загрузить нужное изображение из файла, это делается следующим образом -  
     
 

LPD3D9SPRITE Sprite;

HRESULT hr;

Sprite = new CD3D9Sprite(); // создаем объект для работы со спрайтами и 2d-// // // // // // изображениями

hr = Sprite->LoadTextureFromFile(
DXUTGetD3D9Device(), pSprite, TexFileFullName ); // выполняем загрузку изображения из // // файла в объект, pSprite - это LPD3DXSPRITE - интерфейс для работы спрайтов, // // // // TexFileFullName - полное имя файла (включая путь) загружаемого изображения

 
     
 

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

SAFE_DELETE(Sprite);

 
     
 

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

Всё это есть в ПОЛНОМ ИСХОДНОМ КОДЕ игры.

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

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

Это также показано в ПОЛНОМ ИСХОДНОМ КОДЕ игры.

 
     
     
     
     
  [содержание] [назад] [страница 4] [далее]  
     
 

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



Рейтинг@Mail.ru
Время загрузки: 0,7656