Перші кроки в DarkGDK
Створення нового проекту
Якщо встановлення пройшло успішно, вікно створення нового проекту має виглядати приблизно так:
![]() |
Рис. 1 Створення нового проекту гри |
Відкриття і аналіз проекту
Але ми не будемо створювати нову гру, коли вже є готова. Нову ми зможемо зробити пізніше. Зараз краще відкрити ту яка вже зроблена і працює без помилок, і почати її портити :). Для цього знаходимо папку Dark GDK. Вона в мене знаходиться тут: “C:\Program Files\The Game Creators\Dark GDK”, а ви шукайте там куди інсталювали. Далі заходимо в \Tutorials\3D Objects. Там відкриваємо файл з розширенням .sln. В Solution Exploreri знаходимо Main.cpp. Там увесь код проекту. На все про все 37 рядків. Так мало, що мені аж моторошно.
![]() |
Рис. 2 Дерево проектів рішення |
Перший рядок простий до геніальності:
// Завжди використовуючи DarkGDK переконайтеся що ви включили заголовочний файл. #include "DarkGDK.h"
Далі ще крутіше:
// Точка входу в програму ця функція void DarkGDK ( void )
Не знаю як вам, але мені подобається.
// ввімкнути синхронізацію частоти кадрів і встановити максимальну частоту кадрів 60 fps dbSyncOn ( ); dbSyncRate ( 60 );
Перша команда еквівалентна взяттю контексту рендерингу, встановленню контексту пікселя, увімкнення подвійної буферизації, і повідомленню системі що за малювання береться наша програма, щоб система не пхалася. Десь так. Одним словом команда важлива, і відіграє роль ініціалізації. Наступна функція встановлює частоту кадрів, яка вимірюється в кадрах на секунду (fps). Може бути від 1 до 1000. Спеціальне значення нуль – встановлює частоту кадрів максимальною, на яку здатна система. Варто також зауважити, що двадцять п’ять кадрів на секунду замало, для того щоб двадцять п’ятий кадр не було видно. Я перевірив. Ніякого впливу на підсвідомість 🙂
Далі йде команда виводу тексту, яка працює аналогічно консольним командам. Тобто є невидимий курсор, і кожен раз при виводі він переміщується на наступний рядок.
dbPrint ( "Please wait loading model..." ); dbSync ( ); dbSync ( );
Дві команди dbSync ( ); виконують вивід зображення на екран. Чому їх дві, я не знаю, але з одною, текст на екрані не з’являється. Може буферизація не подвійна, а потрійна. Далі команда завантажує об’єкт (в нашому випадку текстурований анімаційний меш) з файлу .Х, і присвоює йому ідентифікатор 1.
dbLoadObject ( "Colonel-X.X", 1 );
Модель не було б видно, якби на неї не розвернули камеру. Тому додають команду
dbPositionCamera ( 0, 50, -80 );
Координати вони вгадали самі. Наступні функції працюють з анімацією:
dbLoopObject ( 1); dbSetObjectSpeed ( 1, 40 );
Перша команда dbLoopObject ( 1); каже що об’єкт 1 буде циклічно відтвоювати всі кадри своєї анімації. Ця команда має кілька різновидів
void dbLoopObject ( int iID ); void dbLoopObject ( int iID, int iStart ); void dbLoopObject ( int iID, int iStart, int iEnd );
Перша команда відтворює всю анімацію об’єкта. Друга і третя дозволяють задати конкретний діапазон кадрів. Функція dbSetObjectSpeed ( 1, 40 ) дозволяє відкоректувати швидкість відтворення анімації об’єкта. Тепер залишилося тільки все запустити:
while ( LoopGDK ( ) ) { dbSync ( ); } return;
Даний цикл являє собою цикл гри. Він не закінчується поки не закінчиться гра. Команда dbSync ( ); в ньому виводить наступний кадр. А все необхідне для генерації кадру ми вже задали. В кінці за традицією return;. Ура! F5!
![]() |
Рис. 3 Відтворення анімації |
Редагування проекту
Перша річ, яка мені не подобається – це те, що програма працює в вікні. Це просто виправляється. Десь на початку пишемо:
dbSetWindowOff();
І вуаля – наш дядько вже танцює на весь екран. Правда роздільна здатність все одно буде малесенькою. Але ми можемо вибрати і відеорежим. Функція
dbSetDisplayMode ( 1024, 740, 32 );
Встановлює відеорежим в 1024×740 з глибиною кольору 32 біти. Якщо ви їй скажете відеорежим якого не не існує, то помилки не станеться. Функція просто вибере подібний, але доступний для відеоадаптера.
Напишіть відгук