Balls and holes PC game / Balls and Holes PC игра
Сегодня
23 ноября 2024
20:08
Вход Регистрация Забыли пароль ?

webinformatic - Как создать игру ? - Пишем игровой движок с нуля - Общая структура будущего игрового движка
Как создать игру ? - Пишем игровой движок с нуля - Общая структура будущего игрового движка [Содержание]  [Далее] Если Вы всерьез решили заняться созданием игр, то должны понимать, что это каторжный и неблагодарный труд ! Большинство ваших первых проектов обречены на забвение.
подробнее...

Теги

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

Статьи сайта

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

Разное

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

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

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

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

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

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

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

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

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

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

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

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

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

webinformatic - megainformatic cms express files + module slider

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

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

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

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

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

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

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

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

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

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

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

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

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

webinformatic - Система управления сайтом на php - megainformatic cms admin files

webinformatic - обзор антивирусных средств защиты

webinformatic - как работает антивирус ?

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

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

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

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

webinformatic - GET и POST запросы

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

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

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

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

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

webinformatic - Убираем лимит на размер импортируемого файла в PhpMyAdmin

webinformatic - Как создать torrent файл

webinformatic - Нужна ли валидация вашему сайту ?

webinformatic - Недобросовестные клиенты, ЧЕРНЫЙ СПИСОК

webinformatic - Правила размещения материалов

webinformatic - игра для pc - black shades freeware 2002

webinformatic - игра / game CrazyCars3D v9.0 RU/EN - ранний доступ, shareware

игра / game Capsized 2011 PC, EN - обзор игры

урок / tutorial Direct3D 10 Урок 1 - Tutorial 1

игра / game Braid 2008 PC, EN - обзор игры

проекты, игры, уроки, видео, музыка, статьи, обзоры - страница 399

супер видео, костя коробкин комикс, проекты, игры, уроки, видео, музыка, статьи, обзоры - страница 400

выпуск 40 - познай свою реальность часть 1, веселый буквоежка игра, веселый буквоежка, webinformatic проекты, выпуск 39 balls on lift, balls on lift, balls on lift 2, bol 2, шарики на лифте часть 2, создание и доработка сайтов, выпуск 38 сайты, игры, уроки, видео, музыка, статьи, обзоры - страница 401

Выпуски 38 - 44 Посвященные созданию игры на движке fle game engine

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

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

Рассмотрение программирования игр под 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] [далее]  
     
 
Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
Время загрузки: 1,0944