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


Вакансии
Игродельня
Сегодня
30 мая 2017
1:47
Вход Регистрация Забыли пароль ?

megainformatic - Шаг 4 в освоении Flash-технологий - как анимировать персонажа и управлять им
Шаг 4 в освоении Flash-технологий - как анимировать персонажа и управлять им [к содержанию] Хочу поделиться своими изысками и экспериментами, а также опытом в области создания Flash-игр. В данном обширном уроке я попытался охватить следующую тему: Как создать простейшую игру - анимированный персонаж ходит по экрану по нажатию клавиш стрелок ВЛЕВО/
подробнее...

Теги

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

Статьи сайта

megainformatic - статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

megainformatic - статья Тимонина Андрея - Хронология работы программы. Создаем Лог

megainformatic - статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

megainformatic - статья Тимонина Андрея - Исключения. Создаем класс обработки исключений.

megainformatic - статья Тимонина Андрея - States. Создаем менеджер состояний игры.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 1. Создаем страничку регистрации на сайте.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 2. Создаем обработчик, и заносим информацию о пользователе в Б.Д.

megainformatic - статья Тимонина Андрея - Таймер. Выводим время игры.

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 баннер

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

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

Рассмотрение программирования игр под 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] [далее]  
     
 

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



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


визиты
сегодня: 163
всего: 19204
посетители
сегодня: 52
всего: 20962
Время загрузки: 0,8176