Автор: dj_san_ Понедельник, 09 мая 2022, 22:15
Добрый день, друзья!
Решил я попробовать сделать игру для своей ДСки, посмотрел несколько туториолов на ютубе и принялся изучать вопрос.
Установка DevkitPro не составила труда, при установке инсталлер загрузил необходимые библиотеки, и мне осталось только установить Visual Studio Code, которая показалась мне крайне удобным инструментом. После того как я поместил в неё проект из папки example, расположенной внутри DevkitPro, Visual Studio определила что это С++, предлложила установить нужные дополнения, а потом ещё и дополнение для makefile предложила. Ну прям одни удобства, мне даже началось казаться, что я разработчик игр. Только и знай себе, что нажимай на "согласиться", а оно там само себе устанавливается и обновляется.
Но моя радость была не долгой). Когда пример с "Hello world" из девкитпро успешно собрался и файл с расширением NDS успешно открылся в эмуляторе я подумал, что в принципе всё понятно, сейчас сделаю свою собственную игру.
Для начала я выбрал пример из старой советской книжки по программированию на бейсике - игра "угадай число", где в приветственном сообщении на экране нам предлагается угадать число от скажем 1 до 100, и в случае, если мы называем число больше, то система сообщает о том, что перелёт, и если меньше, то недолёт.
Задача ясна, немного усложняю задачу тем, чтобы вывести на верхний экран картинку с надписью "недолёт" или "перелёт" или "победа". А на нижнем экране что-то вроде цифровой клавиатуры и окошка ввода.
Для реализации взял пример, в котором применялся вывод картинки, и тут упёрся в стену.
» Нажмите, для открытия спойлера «
#include <nds.h>
#include <stdio.h>
// git adds a nice header we can include to access the data
// this has the same name as the image
#include "drunkenlogo.h"
int main(void)
{
// set the mode for 2 text layers and two extended background layers
videoSetMode(MODE_5_2D);
vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
consoleDemoInit();
iprintf("\n\n\tHello DS devers\n");
iprintf("\twww.drunkencoders.com\n");
iprintf("\t256 color bitmap demo");
int bg3 = bgInit(3, BgType_Bmp8, BgSize_B8_256x256, 0,0);
dmaCopy(drunkenlogoBitmap, bgGetGfxPtr(bg3), 256*256);
dmaCopy(drunkenlogoPal, BG_PALETTE, 256*2);
while(1) {
swiWaitForVBlank();
scanKeys();
if (keysDown()&KEY_START) break;
}
return 0;
}
Оказалось, что просто подменить drunkenlogoBitmap на myPicBitmap (предварительно поместив изображение того же размера в нужную папку) недостаточно, вызов картинки происходит в #include "drunkenlogo.h", которого даже нет в проекте, и этот проект как-то собирается и даже работает.
Друзья, я знаю что на форуме есть хорошие специалисты, знающие многое по разработке игр с применением этой библиотеки. Я прошу Вас принять участие в обмене опытом, т.к. очень многие ресурсы, которые содержат нужную справочную информацию просто умерли к этому моменту.
Я думаю многим было бы интересно узнать, как при помощи библиотеки сделать базовые вещи:
- Организовать вывод текста на верхний и нижний экран
- Порядок действий для вывода картинки на верхний и нижний экран
- Сделать остановку программы в ожидании действия от пользователя
Это то, с чем я встретился в начале своего изучения. Очень хотелось бы описание бибилиотеки libdns найти, как с ардуиной, открываешь библиотеку, и там понятно написано что эта функция включает к примеру дисплей, а эта выводит на дисплей символ. Но ничего подобного в этом случае я не нашёл, возможно плохо искал..
Буду рад Вашей помощи.