Всем привет.
Присоединяюсь к многочисленной армии начинающих геймстроителей и, так же, как и у всех новичков возникла куча проблем.
Первая и самая большая проблема, я совсем не знаю Си++ и уж тем более API и DirectX.
Много читал, прежде чем заняться и пришел к выводу, что создание консольных калькуляторов, чему учат большинство книг и уроков мне не сильно поможет, так как синтаксис языка это оказалось далеко не самым сложным.
В общем, скачал книгу "
ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ ТРЕХМЕРНЫХ ИГР С DirectX 9.0" автор Фрэнк Д. Луна и начал познавать.
Проблема возникла при инициализации Direct3d
Вот пример кода:
Код:
#include "D:\C++\D3Project2\Headers\d3dUtility.h"
IDirect3DDevice9* Device = 0;
//реализуем функции, входящие в каркас приложения:
bool Setup()
{
return true;
}
void Cleanup()
{
}
//В данном примере нам не требуются никакие ресурсы, так что методы Setup и Cleanup остаются пустыми.
bool Display(float timeDelta)
{
if(Device)
{
Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
0x00000000, 1.0f, 0);
Device->Present(0, 0, 0, 0); // показ вторичного буфера
}
return true;
}
//Объявление функции IDirect3DDevice9::Clear
HRESULT IDirect3DDevice9::Clear(
DWORD Count,
const D3DRECT* pRects,
DWORD Flags,
D3DCOLOR Color,
float Z,
DWORD Stencil
);
//После того, как поверхность очищена, мы показываем вторичный буфер, вызвав метод IDirect3DDevice9::Present.
//Оконная процедура обрабатывает пару событий, а именно позволяет выходить из приложения, нажав клавишу Esc.
LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch( msg )
{
case WM_DESTROY:
::PostQuitMessage(0);
break;
case WM_KEYDOWN:
if( wParam == VK_ESCAPE )
::DestroyWindow(hwnd);
break;
}
return ::DefWindowProc(hwnd, msg, wParam, lParam);
}
//Функция WinMain выполняет следующие действия:
//Инициализирует главное окно и Direct3D.
//Вызывает процедуру Setup для инициализации приложения.
//Запускает цикл обработки сообщений, указав в качестве функции визуализации функцию Display.
//Освобождает выделенные приложению ресурсы и объект IDirect3DDevice9.
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE prevInstance,
LPSTR cmdLine,
int showCmd)
{
if(!d3d::InitD3D(hinstance, 800, 600, true, D3DDEVTYPE_HAL, &Device))
{
::MessageBox(0, "InitD3D() - FAILED", 0, 0);
return 0;
}
if(!Setup())
{
::MessageBox(0, "Setup() - FAILED", 0, 0);
return 0;
}
d3d::EnterMsgLoop( Display );
Cleanup();
Device->Release();
return 0;
}
А вот ошибка:
error C2761: 'HRESULT IDirect3DDevice9::Clear(DWORD,const D3DRECT *,DWORD,D3DCOLOR,float,DWORD)' : member function redeclaration not allowedМне показалось, что при объявлении функции
IDirect3DDevice9::Clear, были объявлены переменные, типа:
Код:
DWORD Count,
const D3DRECT* pRects,
DWORD Flags,
D3DCOLOR Color,
float Z,
DWORD Stencil
А присвоения значений этим переменным я в коде не нашел. Может в этом ошибка? Или я неправильно понял и это не переменные? Или может им присваиваются значения в
d3dUtility?
Мне, как новичку тяжело в этом разобраться, особенно, когда не у кого спросить. Поэтому я пришел на форум, в надежде, что объяснят, помогут, как маленькому разложат по полкам.