for (auto& p : fs::directory_iterator(d)) { str += (p.path().string()); } const size_t lengthOfString = str.length();
char* r = new char[lengthOfString + 1]; str.copy(r, lengthOfString, 0); return r; }
//NSGM.h
#ifndef FNC_H_ #define FNC_H_
#pragma warning(disable:4996)
#define GM_FUNC extern "C" __declspec(dllexport)
GM_FUNC char* find_file_dir(char* ); #endif
Если коротко говоря - здесь есть одна функция, возвращающая все абсолютные пути к файлам директории d (получаем из GM:S), слитые воедино в тип, который ГМ принимает как String. Все отлично компилируется.
Подключаем dll в Included Files. Теперь она лежит в папке datafile/.
Здравствуйте. Во вкладке бэкграундов ставится галочка на "использовать как набор тайлов" и бэкграунд делится на части, указанные как я захочу. Допустим, что я захотел разделить на 4 части, хотя, это не принципиально. И здесь вопрос: как получить порядковый номер определенного тайла среди 4-ех разделенных, если известен его id?
Сообщение отредактировал RomaN72 - Четверг, 01 Июня 2017, 21:21
Кстати, а в игре будет аналог "проклятых" предметов, как в некоторых рогаликах - предметы, которые невозможно снять/выкинуть и которые скорее вредные, чем полезные?
Проклятые предметы - это очень интересно, но думаю, что в игре не будет таких. Они будут просто камнями, я же хотел, чтобы каждый предмет использовался и не появлялся в инвентаре просто так.
ЦитатаMysticPurple ()
Типа как в дьябле (и в некоторых других играх) - при смерти теряешь все свои предметы в инвентаре, кроме тех которые были заблаговременно сложены в сундучок в деревне?)
Именно
ЦитатаMysticPurple ()
Видео мне понравилось, задумка тоже очень интересная, как по мне :)
Я рад)
Сообщение отредактировал RomaN72 - Среда, 22 Июня 2016, 13:20
Итак, прошла ПЕРВАЯ неделя работы над игрой. В видео рандомчик в генерации карты, её отображение(пока такое), анимация героя, удааааары, кривые двери-порталы, и переходы через них и конечно динамическая камера :D
Теперь мыслишки. Инвентарь будет делиться на походный и домашний. Будет так: ты спускаешься в подземелье(или куда-нибудь отправляешься, я еще не придумал) и находишь очередной предмет. Ты можешь положить его к себе в рюкзак, если он не занят. Если ты завершил игру, перед тобой открывается домашний инвентарь, в который ты можешь отложить ненужные предметы. Если же ты не дошел до конца, то предметы в походном инвентаре(рюкзаке) пропадут навсегда. Будут различные локации, различающиеся своими предметами, мобами и может быть сложностью. В конце локации босс. Боссы будут без имен собственных, так как ты будешь встречать и убивать их каждый раз, когда захочешь поиграть. Будут легионеры, командиры, верховные маги и т.д.
С радостью приму ваши советы.
Сообщение отредактировал RomaN72 - Воскресенье, 19 Июня 2016, 19:44
Название: Backpack(Рабочее название) Движок: Game Maker: Studio Платформа: Windows Жанр: Платформер, роуглайк Описание: Ты снова собираешь свой рюкзак. Пещера манит тебя... Страшная смерть подстерегает на каждом углу. Сколько еще драгоценных артефактов ты найдешь?
Задумка: Ты собираешь в свой портфель вещи (размер портфеля ограничен) и идешь в путешествие. Предметы имеют свою значимость и соответственно вес. Например, огромный бердыш, урон которого в сотни раз больше, чем урон от удара кулаком, едва влезет в портфель и будет замедлять вас. Лошадиная подкова же принесет немного удачи и займет совсем чуть-чуть места. Предметы - это подобие перков. С развитием игры ты открываешь новые предметы, возможно, новых героев, новые рюкзаки и т.д. Этакая игра - "собери себя сам и попробуй пройти еще раз".
Дневник разработки:
Задачи №1:
1. Вид карты: 1.1 Простая генерация однотипных комнат - готово 1.2 Туман войны - готово
Задачи №2:
1.Анимация героя: 1.1 Бег - готово 1.2 Покой - готово 1.3 Удары кулаками - готово 1.4 Прыжок
2. Перемещение по комнатам - готово 3. Динамическая камера - готово
Задачи №3:
1. Затемнения при переходе в другую комнату - готово 2. Генерация нескольких локаций 3. Различные комнаты(магазины, комнаты для зачистки и с боссами) 4. Звук ходьбы - готово
Будет еженедельный отчет
Сообщение отредактировал RomaN72 - Суббота, 25 Июня 2016, 15:11
Возможно ли удалить ячейку массива, при этом сместив его, чтобы не было пробелов?
Если да, то вот пример на котором вы можете мне это пояснить:)
Допустим, есть массив mass[].
Его размер равен 5.
При нажатие на кнопку мыши программа должна очистить первое значение (mass[0]), при этом сместить остальные значения(mass[1] в mass[0], mass[2] в mass[1] и т.д.).
После этого удалить последнее значение(mass[4]). Получается список, только с переменными.
Xml - это весьма удобный язык для хранения данных. Покидайте примеров или уроков, кто знаком с работой Xml в Game maker(желательно без установки библиотек). Спасибо большое)
Сообщение отредактировал RomaN72 - Воскресенье, 13 Сентября 2015, 21:16
if instance_exists(torch) { for(i=0;i<instance_number(torch);i+=1) { iii=instance_find(torch,i) if distance_to_object(iii)<=96 { if !collision_line(x,y,iii.x,iii.y,solid,0,0) { depth=-1 sprite_index=sprite2 }
if collision_rectangle(x-11,y-11,x+11,y+11,solid,0,1) { sprite_index=sprite2 depth=-1 }
Ошибка в том, что при создании какого-либо объекта переменная instance_count изменяется, при этом цикл летит к чертям.
Цикл собственно:
Код
Код в Step'е тумана: if instance_exists(torch) { for(i=0;i<instance_count;i+=1) { iii=instance_id[i] if iii.object_index=torch { if distance_to_object(iii)<=96 { if !collision_line(x,y,iii.x,iii.y,solid,0,0) { depth=-1 sprite_index=sprite2//Это прозрачный спрайт или же можно считать, что он не видим. Начальный спрайт черный. }
Собственно, первая проблема в том, что при исчезновении объекта enemy игра выдает ошибку. Вторая проблема заключается в том ,что объект player должен нацеливаться на близ стоящего enemy, а получается ,что он нацеливается на первого созданного enemy. Нужна помощь.
Код
ШАГ: if collision_rectangle(x-32,y-32,x+32,y+32,enemy,1,1) { if atack=false and target=0 { for (i=0; i<instance_count; i+=1) { iii = instance_id[i]; if iii.object_index == enemy { iii.atacked=true target=instance_id[i] alarm[0]=15 atack=true } } } }
Создание. n_1=irandom_range(0,15) n_2=irandom_range(0,15) if n_2=n_1 { while(n_2=n_1){n_2=irandom_range(0,15)} } n_3=irandom_range(0,15) if n_3=n_1 or n_3=n_2 { while(n_3=n_1 or n_3=n_2){n_3=irandom_range(0,15)} } n_4=irandom_range(0,15) if n_4=n_1 or n_4=n_2 or n_4=n_3 { while(n_4=n_1 or n_4=n_2 or n_4=n_3){n_4=irandom_range(0,15)} } n_5=irandom_range(0,15) if n_5=n_1 or n_5=n_2 or n_5=n_3 or n_5=n_4 { while(n_5=n_1 or n_5=n_2 or n_5=n_3 or n_5=n_4){n_5=irandom_range(0,15)} } n_6=irandom_range(0,15) if n_6=n_1 or n_6=n_2 or n_6=n_3 or n_6=n_4 or n_6=n_5 { while(n_6=n_1 or n_6=n_2 or n_6=n_3 or n_6=n_4 or n_6=n_5){n_6=irandom_range(0,15)} } n_7=irandom_range(0,15) if n_7=n_1 or n_7=n_2 or n_7=n_3 or n_7=n_4 or n_7=n_5 or n_7=n_6 { while(n_7=n_1 or n_7=n_2 or n_7=n_3 or n_7=n_4 or n_7=n_5 or n_7=n_6){n_7=irandom_range(0,15)} } n_8=irandom_range(0,15) if n_8=n_1 or n_8=n_2 or n_8=n_3 or n_8=n_4 or n_8=n_5 or n_8=n_6 or n_8=n_7 { while(n_8=n_1 or n_8=n_2 or n_8=n_3 or n_8=n_4 or n_8=n_5 or n_8=n_6 or n_8=n_7){n_8=irandom_range(0,15)} }