Ну может ты и прав где то на 40% (у меня действительно только базовые знания),НО ЭТОТ КОД Я СКОПИРОВАЛ,И ЕГО ПИСАЛ НЕ Я, А АВТОР КНИГИ,тем более этот код является первым встречающимся в этой книге с использованием DirectX,а тут сходу подножка не дающая пройти дальше,до этого у меня всё было гладко (допускал только синтаксичесские ошибки в основном),так что серьёзных проблем с языком у меня нет,есть только проблеммы с написанием програм под windows и DirectX, Max_Gamedev, ты конечно прав в каком то плане(мне действительно надо выучить программмирование, но под windows и DirectX),но каким ХЪ я это сделаю если в первой проге по данным темам ошибка !? А вместо дельных предложений по её решению только критика ! Я белый и пушистый но имею когти и зубы
redinard, не учись ты по этим самоучителям времен дедушки Ленина! Лучше изучай DX SDK. В нем все полно описано и объяснено,но опять же, халявы ждать не стоит. Сначала изучи язык, а затем используй лишь алгоритмы написания программ(что надо сделать,как это сделать,как лучше всего это будет работать и т.п.), не стоит переписывать чужой код просто так.
Техник, я с тобой согласен целиком и полностью,я и сам в принципе понимаю что надо просто хорошо изучать DX SDK ,но раз уж взялся за за изучение этой книги , так надо довести дело до конца , следующим шагом будет изучение "Программирование ролевых игр с DirectX, 2-е издание",по моему книга очень хороша и в ней изложено много чего полезного,а к слову про переписывание кода могу сказать:да код я действительно переписываю но лишь для того чтобы убедится что он работает и в дальнейшем интерпритировать его под свои нужды. Я белый и пушистый но имею когти и зубы
"Программирование ролевых игр с DirectX, 2-е издание"
Книга интересная смотрел ее, она же вдохновила писать свой движок. Но есть причины, по которым я бы не советовал ее воспринимать как какон программирования игр. Там много моментов, про которые можно сказать - "плохое решение". Автор сразу заостряет внимание не на абстракции от API (DirectX), а пытается уживаться с его особенностями. Вследствие чего движок становится слабо расширяемым, привязанным исключительно к одному API. По мне, так лучше все реализации самой граф библиотеки лучше инкапсулировать.
Quote (redinard)
да код я действительно переписываю но лишь для того чтобы убедится что он работает и в дальнейшем интерпритировать его под свои нужды.
Ну это норма, пока ты начинаешь изучть программирование, но как только ты начинаешь серьезный проект, выходящий за рамки "привет, мир!" стоит пытаться придумывать свое решение. А потом идти по лестнице: ооп, паттерны и т.д.
Ну это норма, пока ты начинаешь изучть программирование, но как только ты начинаешь серьезный проект, выходящий за рамки "привет, мир!" стоит пытаться придумывать свое решение. А потом идти по лестнице: ооп, паттерны и т.д.
Я так собственно и расчитываю,у меня со следующего семестра начинается ООП и основы компьютерной графики,а с этими предметами мне будет уже куда проще ...
Добавлено (21.11.2011, 00:53) --------------------------------------------- Вот я собственно и дошол до конца книги , в последней главе идёт собственно написание самой игры,к самой книге так же прилогается исходный код,но что меня больше всего убило,так это то что код исходника и код описанный в книге кое где не сходится , а в самом исходние куча ошибок(зачастую очень тупых),но раз уж взялся так надо довести дело до конца ,исходник прилогаемый к книге привожу ниже. исходник можно скачать здесь говорю сразу что исходник даже не трогал,так что если что руки не у меня не из того места ростут компилирую я в Microsoft Visual Studio 2008
Добавлено (22.11.2011, 19:47) --------------------------------------------- пока что самой гланой проблеммой остаётся то что я не могу правильно обявить идентификатор ship
Добавлено (24.11.2011, 19:48) --------------------------------------------- ------ Построение начато: проект: пираты, Конфигурация: Debug Win32 ------ Компиляция... Movement.cpp c:\users\николай\desktop\пираты\пираты\movement.cpp(76) : warning C4805: ==: небезопасное смешение типа 'BOOL' и типа 'bool' в операции c:\users\николай\desktop\пираты\пираты\movement.cpp(78) : warning C4805: ==: небезопасное смешение типа 'BOOL' и типа 'bool' в операции c:\users\николай\desktop\пираты\пираты\movement.cpp(80) : warning C4805: ==: небезопасное смешение типа 'BOOL' и типа 'bool' в операции c:\users\николай\desktop\пираты\пираты\movement.cpp(82) : warning C4805: ==: небезопасное смешение типа 'BOOL' и типа 'bool' в операции Pirates.cpp c:\users\николай\desktop\пираты\пираты\movement.cpp(76) : warning C4805: ==: небезопасное смешение типа 'BOOL' и типа 'bool' в операции c:\users\николай\desktop\пираты\пираты\movement.cpp(78) : warning C4805: ==: небезопасное смешение типа 'BOOL' и типа 'bool' в операции c:\users\николай\desktop\пираты\пираты\movement.cpp(80) : warning C4805: ==: небезопасное смешение типа 'BOOL' и типа 'bool' в операции c:\users\николай\desktop\пираты\пираты\movement.cpp(82) : warning C4805: ==: небезопасное смешение типа 'BOOL' и типа 'bool' в операции c:\users\николай\desktop\пираты\пираты\drawing.cpp(5) : error C2086: Ship *ship: переопределение c:\users\николай\desktop\пираты\пираты\movement.cpp(70): см. объявление 'ship' c:\users\николай\desktop\пираты\пираты\pirates.cpp(17) : error C2086: Ship *ship: переопределение c:\users\николай\desktop\пираты\пираты\movement.cpp(70): см. объявление 'ship' Создание кода... Журнал построения был сохранен в "file://c:\Users\Николай\Desktop\пираты\пираты\Debug\BuildLog.htm" пираты - ошибок 2, предупреждений 8 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
как мне это исправить ?
Добавлено (01.12.2011, 03:48) --------------------------------------------- вот само обявление ship,и что собственно не так ?
#ifndef SHIP_H #define SHIP_H
#include "ddraw.h" class Ship // the Ship class - stores the player's ship { RECT position;//position on 3x3 grid (max is (2399,1799)) LPDIRECTDRAWSURFACE7 c_pddsone; //holds the sprite bitmap int speed; //the speed of the ship int direction; //determines which sprite is used //stores the location of sprites on //the bitmap(4 directions = 4 sprites) RECT sprites[4]; public: Ship(); void Move(int direction);//move the ship BOOL isCollision(int, int);//test for a collision void moveBack(); //move in reverse direction RECT GetPosition() {return position;} int GetDirection() {return direction;} void Draw();//draw the entire game screen
}; #endif
Добавлено (07.12.2011, 16:49) --------------------------------------------- смог сократить кол.во ошибок до 1-й при помощи добавления extern перед Ship*ship в pirates.cpp , но одна ошибка остаётся , подскажите как исправить
Добавлено (16.12.2011, 18:15) --------------------------------------------- Народ в чём проблемма , DirectX у меня подключен но компилятор выдаёт следующие ошибки:
------ Построение начато: проект: пираты, Конфигурация: Debug Win32 ------ Компоновка... Drawing.obj : error LNK2001: неразрешенный внешний символ ""struct IDirectDrawSurface7 * g_pddsprimary" (?g_pddsprimary@@3PAUIDirectDrawSurface7@@A)" Ship.obj : error LNK2001: неразрешенный внешний символ ""struct IDirectDrawSurface7 * g_pddsprimary" (?g_pddsprimary@@3PAUIDirectDrawSurface7@@A)" Drawing.obj : error LNK2001: неразрешенный внешний символ ""struct IDirectDrawSurface7 * g_pddsback" (?g_pddsback@@3PAUIDirectDrawSurface7@@A)" Ship.obj : error LNK2001: неразрешенный внешний символ ""struct IDirectDrawSurface7 * g_pddsback" (?g_pddsback@@3PAUIDirectDrawSurface7@@A)" Drawing.obj : error LNK2001: неразрешенный внешний символ ""struct IDirectDrawSurface7 * g_pddsone" (?g_pddsone@@3PAUIDirectDrawSurface7@@A)" Drawing.obj : error LNK2019: ссылка на неразрешенный внешний символ _DDLoadBitmap в функции "void __cdecl DisplayScreen(char *)" (?DisplayScreen@@YAXPAD@Z) Ship.obj : error LNK2001: неразрешенный внешний символ "_DDLoadBitmap" Drawing.obj : error LNK2001: неразрешенный внешний символ ""struct IDirectDraw7 * g_pdd" (?g_pdd@@3PAUIDirectDraw7@@A)" Ship.obj : error LNK2019: ссылка на неразрешенный внешний символ "struct IDirectDraw7 * g_pdd" (?g_pdd@@3PAUIDirectDraw7@@A) в функции "public: __thiscall Ship::Ship(void)" (??0Ship@@QAE@XZ) Drawing.obj : error LNK2001: неразрешенный внешний символ ""int currentMapY" (?currentMapY@@3HA)" Ship.obj : error LNK2001: неразрешенный внешний символ ""int currentMapY" (?currentMapY@@3HA)" Drawing.obj : error LNK2001: неразрешенный внешний символ ""int currentMapX" (?currentMapX@@3HA)" Ship.obj : error LNK2019: ссылка на неразрешенный внешний символ "int currentMapX" (?currentMapX@@3HA) в функции "public: int __thiscall Ship::isCollision(int,int)" (?isCollision@Ship@@QAEHHH@Z) Drawing.obj : error LNK2001: неразрешенный внешний символ ""struct HBITMAP__ * (* entireMap)[3]" (?entireMap@@3PAY02PAUHBITMAP__@@A)" Ship.obj : error LNK2001: неразрешенный внешний символ ""struct HBITMAP__ * (* entireMap)[3]" (?entireMap@@3PAY02PAUHBITMAP__@@A)" Drawing.obj : error LNK2001: неразрешенный внешний символ ""struct _DDSCAPS2 ddsc" (?ddsc@@3U_DDSCAPS2@@A)" Drawing.obj : error LNK2001: неразрешенный внешний символ ""struct _DDSURFACEDESC2 ddsd" (?ddsd@@3U_DDSURFACEDESC2@@A)" Drawing.obj : error LNK2001: неразрешенный внешний символ ""long hRet" (?hRet@@3JA)" Drawing.obj : error LNK2019: ссылка на неразрешенный внешний символ _DirectDrawCreateEx@16 в функции "void __cdecl InitializeDirectX(struct HWND__ *)" (?InitializeDirectX@@YAXPAUHWND__@@@Z) Drawing.obj : error LNK2001: неразрешенный внешний символ "_IID_IDirectDraw7" Movement.obj : error LNK2001: неразрешенный внешний символ ""class std::vector<struct Town,class std::allocator<struct Town> > towns" (?towns@@3V?$vector@UTown@@V?$allocator@UTown@@@std@@@std@@A)" Towns.obj : error LNK2001: неразрешенный внешний символ ""class std::vector<struct Town,class std::allocator<struct Town> > towns" (?towns@@3V?$vector@UTown@@V?$allocator@UTown@@@std@@@std@@A)" Movement.obj : error LNK2001: неразрешенный внешний символ ""int moveRight" (?moveRight@@3HA)" Pirates.obj : error LNK2001: неразрешенный внешний символ ""int moveRight" (?moveRight@@3HA)" Movement.obj : error LNK2001: неразрешенный внешний символ ""int moveLeft" (?moveLeft@@3HA)" Pirates.obj : error LNK2001: неразрешенный внешний символ ""int moveLeft" (?moveLeft@@3HA)" Movement.obj : error LNK2001: неразрешенный внешний символ ""int moveDown" (?moveDown@@3HA)" Pirates.obj : error LNK2001: неразрешенный внешний символ ""int moveDown" (?moveDown@@3HA)" Movement.obj : error LNK2001: неразрешенный внешний символ ""int moveUp" (?moveUp@@3HA)" Pirates.obj : error LNK2001: неразрешенный внешний символ ""int moveUp" (?moveUp@@3HA)" Pirates.obj : error LNK2001: неразрешенный внешний символ ""int fire" (?fire@@3HA)" Ship.obj : error LNK2019: ссылка на неразрешенный внешний символ _DDSetColorKey в функции "public: __thiscall Ship::Ship(void)" (??0Ship@@QAE@XZ) Ship.obj : error LNK2019: ссылка на неразрешенный внешний символ _DDCopyBitmap в функции "public: void __thiscall Ship::Draw(void)" (?Draw@Ship@@QAEXXZ) C:\Users\Николай\Desktop\пираты\Debug\пираты.exe : fatal error LNK1120: 21 неразрешенных внешних элементов Журнал построения был сохранен в "file://c:\Users\Николай\Desktop\пираты\пираты\Debug\BuildLog.htm" пираты - ошибок 34, предупреждений 0 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Добавлено (02.01.2012, 17:52) --------------------------------------------- Переделал код как только возможно,ничего не вышло,вот интересно как можно его переписать без применения direct draw ?
Добавлено (08.01.2012, 23:04) --------------------------------------------- Народ,что вы можете сказать по книге: "Программирование стратегических игр с DirectX 9.0" ?
Добавлено (26.01.2012, 18:53) --------------------------------------------- наткнулся на движок hge engine,он очень похож на то что описывается в книге "Программирование стратегических игр с DirectX 9.0",не описывается ли в этой книге создание этого движка ?
Я белый и пушистый но имею когти и зубы
Сообщение отредактировал redinard - Воскресенье, 08 Января 2012, 23:07
на выше приведённые ошибки уже можно закрыть глаза,это проект я уже добил и его возможности меня уже не устраивают (примитивненько слишком),сейчас меня интересует материал изложеный в книге "Программирование стратегических игр с DirectX 9.0",за её изучение возьмусь недели через 2,а пока хотел бы услышать отзывы и мнение по этой книге. Я белый и пушистый но имею когти и зубы
Что касается ошибок в коде: не буду говорить конкретно за этого автора, но пару раз видел в книгах, что авторы намеренно делают тупые ошибки (в основном орфографические, но не всегда только они). И авторы об этом предупреждают. Делают это для того, чтобы не было тупого переписывания кода (В худшем случае, придется разобраться где ошибка и почему, в лучшем - ученик изучит тему, по которой приводится пример, и будет способен написать все самостоятельно).
Раньше тоже занимался таким копированием. Закончил дурью маяться после того как не смог вспомнить ни одного названия функции по теме примера через пару месяцев. Понял все и начал читать все с самого начала, не копируя не единой строчки. Можешь сам провести тест: сможешь ли ты то что "изучил" написать без книги, сам? Если сможешь все, то либо у тебя офигенная память либо ты разобрался. Если хотя бы больше половины, то тоже неплохо - в верном направлении движешься. а вот если ты практически ничего не написал, то ты только потратил время.
И еще про учебу в колледже\универе добавлю: большинство учебных заведений СНГ (но не буду утверждать что все) дают только базовый уровень подготовки. И вполне вероятно, что начав обучение сейчас (что и рекомендую) ты ничего нового на следующем курсе не узнаешь.
Я всё это понимаю,на данный момент меня интереует,стоящая ли выше указанная книга ?
Добавлено (15.02.2012, 02:05) --------------------------------------------- Народ подскажите источники информации которые могут подсказать как создать движок подобный движку игры "космичесские рейнджеры 2"
Космические рейнджеры писались на дельфи, причем двиг писали из-за неимения аналогов. Даже сейчас найти двиг заточенный под такую стратегию как космические рейнджеры почти невозможно. Единственное, рейнджеры -пошаговая стратегия и надо брать что-то для пошаговой. Вот ссылка на тему про пошаговые стратегии. gcup.ru/forum/3-903-1 Извмните, с телефона, ссылку не оформил.
Меня конкретно интересует как там реалезованно обединение 2D и 3D пространств (трёхмерные планетарные бои в побольшей части двумерной игре),и ссылка много толку не дала,движок я собираюсь писать сам,так как это будет моя курсовая.
Добавлено (28.02.2012, 02:22) --------------------------------------------- Ну если с космичесскими рейджерами всё сложно,то не могли бы мне подсказать какую либо инфу которая поможет написать что либо подобное Diablo 2 ?
почитал немнго,инициализация приложения у него как то выполнена не понятно ...
Добавлено (27.03.2012, 23:11) --------------------------------------------- Народ,назрел вот такой вопрос,у меня есть код инициализации DirectX приложения
HRESULT InitialDX(HWND hWnd); // Функция инициализации ДХ void Render(); // Функция рендеринга(отрисовки) void ReleaseDX(); // Функция освобождения устройств.
while(msg.message!=WM_QUIT) // Цикл обработки сообщений { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Render(); //Отрисовка сцены } } } return 0; }
HRESULT InitialDX(HWND hWnd) { if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION))) //создание основного интерфейса return E_FAIL; D3DDISPLAYMODE Display; // структура с настройками монитора if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. return E_FAIL;
D3DPRESENT_PARAMETERS Direct3DParametr; // Структура с настройками ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры Direct3DParametr.Windowed=TRUE; // Рeжим отображения приложения(true - оконное, false -полноэкранное) Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD; // Метод переключения буферов Direct3DParametr.BackBufferFormat=Display.Format; // Формат пикселя(колличество разрядов цвета) Direct3DParametr.EnableAutoDepthStencil=TRUE; // Управление буфером глубины Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16; // Формат буфера глубины Direct3DParametr.BackBufferWidth=Display.Width; // Ширина буфера Direct3DParametr.BackBufferHeight=Display.Height; // Высота буфера // Direct3DParametr.FullScreen_RefreshRateInHz=Display.RefreshRate; //Частота обновления экрана(только в полноэкранном режиме)
if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство
return E_FAIL;
return S_OK; }
void Render() { pDirect3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0f,0); //Очистка вторичного буфера pDirect3DDevice->BeginScene(); //Начало рендеринга // Код отрисовки сцены pDirect3DDevice->EndScene(); //Конец рендеринга pDirect3DDevice->Present(NULL,NULL,NULL,NULL); // копирование вторичного буфера в первичный }
и есть некий фрагмент кода реализующий вывод поля состоящего из тайловых блоков
// Глобальный массив для карты блоков int g_iTileMap[100]; // 10*10 = 100 ячеек необходимо
// Прототип функции отображения блока void vDisplayTile(int x, int y);
void main() { int x, y;
// Сверху вниз for(y = 0; y < 10; y++) { // Слева направо for (x = 0; x < 10; x++) { // Отображение блока vDisplayTile(x, y); } } }
void vDisplayTile(int x, int y) { int iTile; int tileWidth = 64; int tileHeight = 64; int mapWidth = 10;
// // Вычисляем номер блока, расположенного // по полученным координатам x и y. // iTile = g_iTileMap[(x + (y * mapWidth))];
// Отображение на экране растрового изображения // Следующая функция является фиктивной // и представляет лишь псевдокод. Чтобы код // работал вам необходимо заменить ее на // настоящую функцию рисования блока. // DrawBitmap(iTile, (x * tileWidth), (y * tileHeight)); }
как мне их обединить чтобы они зароботали ? (нубский вопрос но всё же) Я белый и пушистый но имею когти и зубы
goldsphere, А что в 2010 есть такого, чего нету 2008? Если нету серьезных улучшений, то переходить незачем. Java/C++/Unity(C#) Programmer. Мой блог MightMortal.RU
О, я смотрю, автор темы использовал книгу "Хенкеманс, Ли. Программирование на С++" Ну по крайней мере строки кода совпадают. Я сей час тоже по этой книге учусь :). Она мне нравится тем, что всё отлично и понятно объясняется. Правда в примерах есть несколько ляпов и приходится самому выявлять ошибки. А так, книга прикольная) Учусь программировать на C++)