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


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

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

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

megainformatic cms e-mailer

megainformatic cms e-mailer

megainformatic cms e-mailer

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

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

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

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

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

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

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

megainformatic - Создание модели броневика (Хэд) - Анимация вращения колес

megainformatic cms express files

megainformatic cms express files

megainformatic cms express files

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

megainformatic cms express files - Развертывание сайта на Вашем хостинге

megainformatic - Настольная игра "Веселый Буквоежка"

megainformatic - Уроки delphi directx 8.1

megainformatic - Уроки delphi directx 8.1 - Урок 1 - Введение в Delphi DirectX 8.1. Создание шаблона стартового приложения.

megainformatic - Уроки delphi directx 8.1 - Урок 1 - Введение в Delphi DirectX 8.1. Создание шаблона стартового приложения. Страница 2

megainformatic - Урок 2 Создаем и обрабатываем команды меню.

megainformatic - Урок 2 Создаем и обрабатываем команды меню. Страница 2

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8 - Страница 2

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8 - Страница 3

megainformatic - Урок 4 Построение класса приложения

megainformatic - Урок 4 Построение класса приложения - Страница 2

megainformatic - Урок 5 Построение классов игровых объектов и других необходимых классов

megainformatic - Урок 5 Построение классов игровых объектов и других необходимых классов - Страница 2

megainformatic - Урок 6 Игровая логика

megainformatic - Заметки по joomla - JFolder::create: Path not in open_basedir paths. Что это?

megainformatic cms express files - Добавление статей на сайт под управлением megainfromatic cms express files

megainformatic - Урок 7 2D-анимация

megainformatic - Урок 8 Загрузка/Сохранение текущей игры, режим паузы, режимы часов/будильника, запуск браузера Internet Explorer для показа сайта разработчика и других интернет-ресурсов

megainformatic - Урок 9 Тестирование и отладка приложения

megainformatic - Мои Музыкальные Миры

megainformatic - уроки Photoshop free

megainformatic cms express

megainformatic cms express

megainformatic cms express

megainformatic cms express files

megainformatic - Методы создания растровых изображений в Adobe Photoshop

megainformatic - Создание фотореалистичной текстуры травы

megainformatic - Рабочее пространство Adobe Photoshop

megainformatic - Бесшовные (тайловые) текстуры

megainformatic - Создание изображений огня, воды, неба

megainformatic - Создание текстур горных пород и суши (урок 5)

megainformatic - Рисование персонажей (урок 6)

megainformatic - Рисование фона (урок 6 часть 2)

megainformatic - Рельефные изображения

Добавление статей на сайт под управлением megainformatic cms express

megainformatic - Воспроизведение файлов в форматах it, xm, s3m, mod

megainformatic - Воспроизведение файлов в форматах it, xm, s3m, mod - страница 2

megainformatic - Воспроизведение в игре музыки в формате XM

megainformatic - Воспроизведение файлов в формате OGG Vorbis

подробнее

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

[Содержание]  [Далее]

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

Большинство ваших первых проектов обречены на забвение.

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

Ну как, еще не пропал оптимизм ?

Тогда я с вами :))))

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

И я искренне надеюсь, что Вы уже ознакомились со всеми другими материалами на сайте Мега Информатик, посвященными созданию игр под directx 9c на c++.

Начальная точка выполнения приложения

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

Давайте познакомимся с общей схемой работы игрового движка написанного на c++ для directx 9c

общая схема работы игрового движка написанного на c++ для directx 9c

Теперь поясню приведенные на схеме обозначения.

BOOL CFleApp::InitInstance()

Более полно записывается именно так.
Это метод класса CFleApp, с которого начинается выполнение приложения.

Разумеется класс Вашего приложения может называться как-то иначе, к примеру CGameApp или CGameProgApp

Данный метод является стандартным для Win32 приложений, основанных на диалоговых окнах.

Если Вы возьмете за основу примеры представленные в DirectX SDK Aug 2008 или более поздних верий, то там Вы также найдете нечто похожее.

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

void InitD3DApp()

Данная процедура, как понятно из схемы, вызывается внутри CFleApp::InitInstance и выполняет собственно начальную инициализацию.

Приведу реальный пример кода, который там записан

void InitD3DApp()
{

GetModuleFileName(NULL, AppRootDir, AppRootDirSize);
/* получаем полный путь к файлу исполняемого приложения */
PathRemoveFileSpec(AppRootDir);/* удаляем из пути имя файла, оставляя только путь к рабочей папке, в которой происходит выполнение - и как видим значение будет храниться в переменной AppRootDir. Забегая вперед скажу, что многие функции движка будут использовать данную переменную чтобы находить файлы ресурсов игры (картинки, звуки, списки), чтобы загружать из них нужную информацию. */


LoadConfigurationSettings();
/* данная процедура выполняет загрузку настроек игрового приложения */


InitGUI();
/* и наконец эта процедура - инициализирует элементы GUI для окна настроек игры */


}
Следует отметить, что сама эта процедура описана в модуле Fle.cpp

2) CFleDlg::OnLButtonUp

Этот метод класса CFleDlg выполняет обработку момента отпускания левой кнопки мыши, в момент, когда курсор находился над одной из кнопок игровой оболочки.

Более подробно об игровой оболочке рассказано в статье - игровая оболочка

3) StartD3DApp();

Процедура StartD3DApp может вызываться по нажатию кнопки ИГРАТЬ в игровой оболочке, либо если оболочка не используется в вашем проекте, то вызывается непосредственно внутри InitD3DApp()

Всё самое интересное происходит именно внутри StartD3DApp - там вызываются все необходимые процедуры, создаются объекты классов, обеспечивающие начальную инициализацию DirectX - приложения, управлению режимами игры и созданием игрового процесса.

4) FreeD3DApp();

При выборе пункта меню ВЫХОД в игре или нажатии определенной клавиши (или комбинации клавиш) - обычно [Esc], [F10], [Ctrl] + X, [Alt] + [F4] или еще что-то приложение останавливает игровой процесс и освобождает все выделенные ему ресуры памяти. Это и есть всё то, что происходит внутри FreeD3DApp.

3.1) DXUTMainLoop();

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

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

[Содержание]  [Далее]
подробнее


[к содержанию] [другие статьи Тимонина Андрея]

DirectX9. Создаем основной класс обработки графики.

автор: Тимонин Андрей

дата публикации на сайте Мега Информатик: 18.11.2012

Добро пожаловать в цикл моих уроков посвященных программированию.

На написание этой статьи меня вдохновил блог о создании игр с нуля, который можно посмотреть по следующей ссылке mindillusion.ru.

Здесь я хочу затронуть основные, интересные для меня, моменты. Рассказать вам с чего нужно начинать делать свое первое 3д или 2д приложение.


Существует 2 основные низкоуровневые библиотеки для вывода графики, над которыми пишутся движки, применяемые как в сфере разработки игр, так и прочих графических приложений не связанных с геймдевом. Это DirectX, на данный момент вышла 11 версия и OpenGl. В этой статье мы будем касаться 9 версии директа. Другие версии могут немного отличаться.

Результат наших действий будет такой, как на скриншоте.

И так, перейдем к делу... У нас получается такой интерфейс класса. Здесь все, что необходимо для работы с графическим устройством. По крайней мере, что нам интересно на данный момент. Часть методов я приведу, снабдив, необходимыми для понимания комментариями. Класс у нас в единственном экземпляре, что дает нам возможность объединить возможности в одном классе. В том числе хранение и работа с текстурами и шейдерами. Это будет тема для одной из следующих статей. Смотрим код.

class Graphics : public singleton<Graphics>
{
friend class singleton<Graphics>;
private:

int _width,_height; //размеры экрана(сделал для удобства)

//интерфейс directX
LPDIRECT3D9 m_pD3D;

//интерфейс устройства вывода
LPDIRECT3DDEVICE9 m_pd3dDevice;

// структкура с параметрами девайса
D3DPRESENT_PARAMETERS m_d3dpp;

typedef std::vector<CTexturePtr> vecTextures;
vecTextures m_vecTextures;

typedef std::vector<CShaderPtr> vecShaders;
vecShaders m_vecShaders;

protected:

//закрыто. нет смысла создавать все равно singleton
Graphics(void);
~Graphics(void);

public:

//возвращает устройство
LPDIRECT3DDEVICE9 GetDevice();

//инициализация устройства
bool Init(HWND hRenderWnd, int width, int height);

//возвращает ширину
int getWidth() const {return _width;}

//возвращает высоту
int getHeight() const {return _height;}

//удаление интерфейсов
void Cleanup();

//сброс
HRESULT Reset();

//начало рендера
bool StartRender(D3DCOLOR bgColor=0xff808080);
//устанавливает формат вершин
HRESULT SetFVF(DWORD FVF);

//устанавливает пиксельный и верш шейдер( в статье не будем рассматривать. рано еще)))
HRESULT SetPixelShader(CShaderPtr shader);
HRESULT SetVertexShader(CShaderPtr shader);

//установка характеристик рендера
HRESULT SetRenderState(D3DRENDERSTATETYPE State, DWORD Value);

//установка характеристик текстур(смешивание, альфа и тд)
HRESULT SetTextureStageState(DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value);

//установка способа отображения семплов( фильтрация)
HRESULT SetSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value);

//установка текстуры
HRESULT SetTexture(DWORD stage, CTexturePtr pTex);

//начало блока настроек рендера
HRESULT BeginStateBlock();

//конец блока настроек рендера
HRESULT EndStateBlock(LPDIRECT3DSTATEBLOCK9* block);

//отрисовка премитива
HRESULT DPUP( D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride);

//конец отрисовки

bool EndRender();

//загрузка текстур и шейдеров(про текстуры будет отдельная статья)
CTexturePtr LoadTexture(const std::wstring& szFileName);
CShaderPtr LoadShader( const std::string& strFileName, const std::string& strFuncName, const std::string& profile);
};

Сейчас нам интересны два интерфейса:

//интерфейс directX
LPDIRECT3D9 m_pD3D;

//интерфейс устройства вывода
LPDIRECT3DDEVICE9 m_pd3dDevice;

Для начала их необходимо обнулить.

Graphics::Graphics()
{
m_pD3D = NULL;
m_pd3dDevice = NULL;
ZeroMemory(&m_d3dpp, sizeof(D3DPRESENT_PARAMETERS)); // обнулим
}

А сейчас посмотрим, как инициализируется устройство.

bool Graphics::Init(HWND hRenderWnd, int width, int height)
{
// сначала проицициализируем сам DirectX 9
m_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
if (m_pD3D==NULL)
return false;
//создаем структуру с режимами дисплея
D3DDISPLAYMODE d3ddm;
//пробуем определить параметры дисплея
if(FAILED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
//генерируем исключение
ExceptionBase err(GETDISPLAYMODEERROR,L"Не могу определить параметры дисплея");
throw err;
return false;
}

//характеристики заднего буфера---------------------------------------------------------
m_d3dpp.BackBufferWidth = width; // указываем ширину и
m_d3dpp.BackBufferHeight = height; // высоту области рендера
m_d3dpp.BackBufferCount = 1; // один внеэкранный буфер

m_d3dpp.BackBufferFormat = d3ddm.Format;

//-------------------------------------------------------------------------------------------------------
m_d3dpp.Windowed = TRUE; // рендер в окне, а не в полный экран

m_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // так лучше делать всегда
m_d3dpp.EnableAutoDepthStencil = TRUE; // нам нужен Z-буфер
m_d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; // формат Z-буфера
m_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;

// и теперь создадим сам девайс
HRESULT hr = m_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, hRenderWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING,
&m_d3dpp, &m_pd3dDevice );
if (FAILED(hr))
return FALSE;
_height = height;
_width = width;
return TRUE;
}

Чтобы освободить интерфейс, необходимо вызвать Release. Посмотрим, как удаляются, созданные нами, объекты.

void Graphics::Cleanup()
{
// освобождаем текстуры
vecTextures::iterator itr = m_vecTextures.begin();
while(itr!=m_vecTextures.end())
{
(*itr)->Release();
delete *itr;
itr++;
}
m_vecTextures.clear();

// освобождаем шейдеры
vecShaders::iterator itr2 = m_vecShaders.begin();
while(itr2!=m_vecShaders.end())
{
(*itr2)->Release();
delete *itr2;
itr2++;
}
m_vecShaders.clear();

if (m_pd3dDevice)
{
m_pd3dDevice->Release();
m_pd3dDevice = NULL;
}
if (m_pD3D)
{
m_pD3D->Release();
m_pD3D = NULL;
}
}

Следующим шагом, посмотрим на методы, необходимые для отрисовки.

bool Graphics::StartRender(D3DCOLOR bgColor)
{
if (FAILED(m_pd3dDevice->BeginScene())) // начинаем рисовать
return false;

// очистка экрана
if (FAILED(m_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|
D3DCLEAR_STENCIL| D3DCLEAR_ZBUFFER, bgColor, 1, 0)))
return false;

return true;
}

bool Graphics::EndRender()
{
m_pd3dDevice->EndScene(); // закончили рисовать

// копируем на экран
HRESULT hr = m_pd3dDevice->Present(NULL, NULL, NULL, NULL);
if (FAILED(hr)/*==D3DERR_DEVICELOST*/)
Reset();

if (FAILED(hr))
return false;

return true;
}

Установка формата вершин и отрисовка примитивов.

HRESULT Graphics::SetFVF( DWORD FVF )
{
return m_pd3dDevice->SetFVF(FVF);
}

HRESULT Graphics::DPUP( D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride )
{
return m_pd3dDevice->DrawPrimitiveUP(PrimitiveType, PrimitiveCount, pVertexStreamZeroData, VertexStreamZeroStride);
}

И напоследок, посмотрим на настроечные функции.

HRESULT Graphics::SetRenderState( D3DRENDERSTATETYPE State, DWORD Value )
{
return m_pd3dDevice->SetRenderState(State, Value);
}

HRESULT Graphics::SetTextureStageState(DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value )
{
return m_pd3dDevice->SetTextureStageState(Stage,Type,Value);
}

HRESULT Graphics::SetSamplerState( DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value )
{
return m_pd3dDevice->SetSamplerState(Sampler, Type, Value);
}

На этом пока все. Применение смотрите в следующей части.

 

[к содержанию] [другие статьи Тимонина Андрея]

подробнее

     
 
megainformatic cms e-mailer

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

Представляет из себя 4 в 1 - megainformatic cms, e-pro, e-shop и e-mailer. Эти системы позволяют вам управлять сайтом, партнерскими заказами, магазином и организацией e-mail рассылок.

 

Стоимость: 1800 руб.

 
     
 

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

Эта система объединяет в себе 4 подсистемы:
- megainformatic cms - систему управления сайтом;
- e-pro - систему управления заказами в магазинах партнеров;
- e-shop - систему управления ващим собственным интернет-магазином;
- e-mailer - систему автоматизированных рассылок по базе пользова-
телей.
Таким образом, приобретая данную систему Вы получаете 4 в 1.
Это позволит вам создать собственный сайт - интернет-магазин,
активно использовать партнерские системы и выполнять рассылки
новостей вашему кругу пользователей.

 
     
     
 

Система megainformatic cms e-mailer имеет следующие особенности:

- простая и быстрая установка;

- полностью открытый исходный код на php;

- подробное документирование возможностей;

- удобное управление контентом;

- доступный для понимания код;

- наличие встроенных модулей административной части, контента, поиска, карты сайта, случайной новости, даты и времени, e-pro, e-shop, e-mailer, сменные шаблоны, выпадающее меню;

- наличие подключаемых платежных систем WebMoney, Робокасса, Единый Кошелек, Квитанция сбербанка, QIWI, указание реквизитов для других систем, например yandex.деньги.

 
     
 

Система megainformatic cms e-mailer решает следующие задачи:

- позволяет создать сайт, пополнять, расширять и продвигать его;

- добавить к сайту товары и систему оплаты и обработки заказов, превратив его в интернет-магазин - e-shop;

- осуществлять работу с партнерскими системами других магазинов обрабатывая заказы с помощью системы e-pro;

- организовывать автоматизированное пополнение списков рассылки и выполнять автоматизированные рассылки новостей по базе пользователей вашего сайта;

 
     
 

Если Вы всё еще сомневаетесь остановить ли свой выбор на megainformatic cms e-mailer, тогда рекомендую вам начать с бесплатного решения - megainformatic cms free - это уникальная система, работающая без баз данных и состоящая всего из ОДНОГО!!! исполнимого файла.

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

 
     
  Добро пожаловать в мир электронных знаний !!!  
     
подробнее

Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 5

Предлагаем вашему вниманию онлайн-комикс Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny).

Ур-ра !!! Летим !!! Здорово !!!!! Я наверное сплю ?

Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 5

если кликать картинку она будет последовательно меняться в размерах от 620 до 2048 пиксель.

[страница 1][страница 2] [страница 3] [страница 4] [страница 5]  [страница 6] [страница 7] 

Creating game on fle game engine - Simple game / Создание игры на fle game engine - Simple game

5. Отображаем прыгающий шарик, узнаем как задается для спрайта его центр и знакомимся с векторной системой координат



read paper in english

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





Содержание

страница 1 - Спрайты

страница 2 - Объекты

страница 3 - Наложение объектов

страница 4 - Код - Настройка параметров Scene Editor fge и написание кода для вывода спрайта шарика в вашем первом игровом приложении

страница 5 - Отображаем прыгающий шарик

страница 6 - Загрузка игровой сцены

страница 7 - Перемещения игровой сцены

страница 8 - Закрываем часть сцены от пустот при помощи черной текстуры с прорезью, ограничиваем перемещение сцены

страница 9 - Реализуем корректное попадание в ямы и около ям - определяем границы спрайтов ям и спрайта прыгаюшего шарика

страница 10 - Проверка столкновений

страница 11 - Игровой счёт, звуки, музыка

урок #2 страница 1 - Создание новых сцен для игры simple game, расширенная версия simple game extended

13. Скроллинг больших локаций

14. использование переменных в игре на c++ directx 9c

15. Мульти анимация







Вы преодолели первую трудность. Хотя их будет еще много впереди.

Для тех, кто так и не понял в чём была проблема, поясняю.

simple_game\Media\textures\simple_game\tex_list.txt



ball\jump.tga; -0.7f; 0.1f; 0.909f; 0.5f; 0.5f; 64; 128; 0; 0; 4; 8.0f; 14.0f;

Чтобы шарик выводился значение z = 0.909f надо изменить на такое, чтобы шарик стал виден. Например, z = 0.8999f

При больших значениях шарик оказывается выводимым "за фоном". Поэтому-то его и не видно. Фон имеющий координату z = 0.9f, по сравнению с шариком имеющим координату z = 0.909f, оказывается ближе к наблюдателю (значения z меньшие - ближе к наблюдателю, большие - дальше от наблюдателя), и просто перекрывает его.

Если Вы внимательно посмотрите на код, который вставляли по инструкции на странице 4, то наверное догадаетесь, что методы

4)
g_Splash.Anim(); //это то, что вы нашли
g_AI_Ball_Sprite.Anim(); //это то, что вы должны добавить


5)
g_Splash.Draw(); //это то, что вы нашли
g_AI_Ball_Sprite.Draw(); //это то, что вы должны добавить


Анимируют и отрисовывают наш шарик.

Попробуйте закомментировать один из них - g_AI_Ball_Sprite.Draw() или g_AI_Ball_Sprite.Anim() и перекомпилируйте приложение.

//g_AI_Ball_Sprite.Anim(); //если закомментируем эту строчку - шарик перестанет анимироваться, т. е. не будет прыгать


Выводим шарик

Если же закомментируем g_AI_Ball_Sprite.Draw()

//g_AI_Ball_Sprite.Draw(); //если закомментируем эту строчку - шарик перестанет быть виден вообще.


Теперь давайте ознакомимся с особенностями вывода спрайтов в играх.
Откройте файл
simple_game\Media\textures\simple_game\tex_list.txt



И посмотрите на параметры нашего шарика -

ball\jump.tga; -0.7f; 0.1f; 0.8999f; 0.5f; 0.5f; 64; 128; 0; 0; 4; 8.0f; 14.0f;

Если Вы читали readme.txt приложенный к утилите Coords2D, которая позволяет настраивать параметры спрайтов и их анимаций, то знаете, что означает каждый из параметров.

Начнём по-порядку.

name x y z xScale yScale Width Height xOffset yOffset FramesPerLine FramesNum AnimDelay;
ball\jump.tga; -0.7f; 0.1f; 0.8999f; 0.5f; 0.5f; 64; 128; 0; 0; 4; 8.0f; 14.0f;


name - означает имя файла загружаемого спрайта;

x, y, z - координаты его вывода на экран. Причём x и y могут быть векторными - значения которых не зависят от текущего разрешения экрана и могут быть экранными заданными в пикселях - зависящими от разрешения экрана.

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

Чуть ниже мы разберемся как использовать и те и другие.

xScale, yScale - масштаб выводимого спрайта по x и y - значение 1.0f - выводить спрайт в натуральном размере. Значения меньшие 1.0f - уменьшать спрайт, значения большие - увеличивать.

Width, Height - ширина и высота спрайта в пикселях.

xOffset, yOffset - смещение до начала спрайта в пикселях. Имеет смысл если спрайт внутри изображения размещен со смещением или используется мультиспрайт - т. е. изображение, содержащее внутри себя несколько разных спрайтов.

Узнать больше о создании и вставке спрайтов в вашу игру можно также в серии уроков - Шарики на лифте - Как создать игру, в частности урок Как создать игру - Вставка созданной графики, звуков и музыки в игру подробно описывает в том числе и работу по вставке в игру спрайтов и правильное описание их параметров.

FramesPerLine - число кадров в одной линии по оси X, для оси Y это не применяется;

FramesNum - число кадров в анимации спрайта;

AnimDelay - задержка по времени между показом кадров спрайта в долях секунды. Определяет, таким образом, скорость показа анимации.





Если всё понятно - перейдем к экспериментам.

Для начала попробуем вывести наш шарик в центре экрана.

Для этого всего лишь нужно снова открыть файл

simple_game\Media\textures\simple_game\tex_list.txt



И задать x = 0.0f, y = 0.0f -

ball\jump.tga; 0.0f; 0.0f; 0.8999f; 0.5f; 0.5f; 64; 128; 0; 0; 4; 8.0f; 14.0f;

Сохранить изменения и перезапустить приложение simple_game, если оно у Вас было запущено.

Шарик будет выведен почти в центре экрана, но немного ниже его.

Шарик в центре экрана

Ниже, потому что, если Вы помните, анимация нашего шарика выглядит так -

прыгающий шарик

прыгающий шарик

Поэтому позиционируя спрайт в центр экрана, мы получим небольшое смещение вниз - потому что внутри самого спрайта шарик смещен вниз. Иными словами центр спрайта - это его левый верхний угол, а не центр шарика.

Поэтому, когда Вы будете выводить спрайты в игре, учитывайте возможное смещение их центра и вводите соответствующую поправку.

Так, чтобы наш шарик оказался точно в центре экрана, в коде его вывода в модуле

simple_game\scripts\game_sprite\game_sprite.cpp

Нужно найти строку кода

CGameSprite::Draw

и имеющийся там код -

SpriteSprite->m_v2Vector2ScreenPos.x = SpriteSprite->m_Position.x;
SpriteSprite->m_v2Vector2ScreenPos.y = SpriteSprite->m_Position.y;


изменить на

SpriteSprite->m_v2Vector2ScreenPos.x = SpriteSprite->m_Position.x - 0.05f;
SpriteSprite->m_v2Vector2ScreenPos.y = SpriteSprite->m_Position.y + 0.2f;


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

Шарик в центре экрана

Теперь шарик окажется еще точнее к центру. Можете поэкспериментировать со значениями смещений, чтобы отцентрировать шарик еще точнее.





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

Можете попробовать теперь в файле

simple_game\Media\textures\simple_game\tex_list.txt



Менять первые 2 значения для x и y на значения в диапазоне от -1.0f до 1.0f, сохранять изменения в файле и перезапускать приложение simple_game

ball\jump.tga; 0.5f; 0.5f; 0.8999f; 0.5f; 0.5f; 64; 128; 0; 0; 4; 8.0f; 14.0f;

Векторная координатная система

Центр экрана это точка с координатами x = 0.0f, y = 0.0f

Верхний край экрана это y = 1.0f, нижний - y = -1.0f.

Для x левый край экрана это x = -1.0f, а правый x = 1.0f

Поэкспериментируйте с изменением координат в файле

simple_game\Media\textures\simple_game\tex_list.txt



чтобы лучше уяснить себе этот важный момент.

В показаном ниже видео продемонстрированы 4 варианта отображения шарика в одной из 4 четвертей координатных осей.



для x, y = 0.5f, 0.5f - справа вверху, -0.5f, -0.5f - слева внизу,
0.5f, -0.5f - справа внизу, -0.5f, 0.5f - слева вверху.

[назад] [далее]



megainformatic live chat
Начать беседу
X
 

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



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


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