PMG

Форумы по созданию игр
Текущее время: 25 сен 2017 21:02

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: + ещё один новичек с нубскими вопросами
СообщениеДобавлено: 14 дек 2008 18:37 
Не в сети
Новичок

Зарегистрирован: 14 дек 2008 18:10
Сообщения: 2
Всем привет.
Присоединяюсь к многочисленной армии начинающих геймстроителей и, так же, как и у всех новичков возникла куча проблем.
Первая и самая большая проблема, я совсем не знаю Си++ и уж тем более 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?

Мне, как новичку тяжело в этом разобраться, особенно, когда не у кого спросить. Поэтому я пришел на форум, в надежде, что объяснят, помогут, как маленькому разложат по полкам. :r


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: + ещё один новичек с нубскими вопросами
СообщениеДобавлено: 15 дек 2008 13:23 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 11 авг 2004 17:00
Сообщения: 283
Откуда: Москва
Garri66656 писал(а):
Код:
//Объявление функции IDirect3DDevice9::Clear
HRESULT IDirect3DDevice9::Clear(
     DWORD Count,
     const D3DRECT* pRects,
     DWORD Flags,
     D3DCOLOR Color,
     float Z,
     DWORD Stencil
    );
//После того, как поверхность очищена, мы показываем вторичный буфер, вызвав метод IDirect3DDevice9::Present.



Вот этот кусок на фиг выкиньте. Он здесь абсолютно не нужен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: + ещё один новичек с нубскими вопросами
СообщениеДобавлено: 15 дек 2008 20:00 
Не в сети
Новичок

Зарегистрирован: 14 дек 2008 18:10
Сообщения: 2
Спасибо. :oops:


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB