Без интерфеса можно через рендер текстуру картинку захватить, так чуть больше строчек кода получится конечно. Или через тот же ScreenCapture и вырубать интерфейс за кадр до снятия скриншота.
Пользуясь случаем, хочу сказать, что есть еще литература и даже на русском (но не утверждаю, что ее полезно и обязательно читать, особенно новичкам) Шаблоны игрового программирования
Хочу как-нибудь воспользоваться тем, что у меня имеется локальный архив понравившихся игрушек и написать на Гамин подборку того, мимо чего тут прошли. Вот эта игра точно там будет. Постоянно нужно возвращаться, так ещё и концовок уйма.
Какие папки заводить и как хранить ассеты. Конечно, никто не мешает делать так же как было и ГМС2.3 даже предлагает по умолчанию такую структуру.
Я только начал делать проект, а без фильтров по типу ресурсов это выглядит как форменный пиздец. БЫло бы переключение фильтров быстрым действием(по шорткату или одной кнопки) - я бы по-другому на это всё смотрел.
Спорный плюс. Раньше можно было зайти в первую комнату и там посмотреть в Creation Code, либо в конкретный скрипт инициализации Всего. А теперь ищи-свищи по ВСЕМ скриптам проектам, что ты там где инициализировал и не пересеклись ли имена ещё между собой незапланированно.
Раньше тоже было спорно. Я, например часто комнаты дублирую, а в GMS2 ещё и наследую. Мне нахер не сдался там код, который должен вызываться один раз за всю игру, а именно - на старте. Кроме того лезть в creation code дико неудобно. Именно потому я его последний раз использовал лет 6 назад.
Такое было?!
Да, в GMS2.2 можно драг-н-дропом объекты из панели ресурсов переносить в список событий чтобы автоматом создать событие столкновения с ним. Можешь даже в GMS7dev это проверить.
Приведи пример, непонятно.
Я сам не очень понимаю пока чем это чревато. Могу привести цитату из обновления пока что
По логике other.myVar должно вроде прокатить, т.к. other содержит в себе структуру. Лично я всегда использовал второй вариант, т.к. считал что other - это что-то типа ссылки на объект и мне в любом случае нужно брать id чтобы не профакапиться.
self можно использовать только для адресации локальных переменных, т.е. реально self.x = 10 Звучит как (-1).x = 10
В то время как id инстанса - довольно большое число.
Если ты в левый объект передаёшь self то ты передаёшь эту -1 а не id инстанса. В твоём примере это car.human. И если ты будешь использовать эту переменную в контексте объекта car, то там будет -1 и указывать будет на свой контекст, а не на контекст конкретного инстанса как ты задумывал.
self - это пережиток прошлого, что и написано в справке. Так что просто забудь про него.
Блин геморная модель... Но всё-же диск реально по менять более-менее спокойно(разве что с верхней крышкой гемор)...
Кстати если внутрь полезешь, я всёж рекомендовал-бы полностью разобрать, и уже решить и проблему куллера и может даже термопасту сменить(самой дорогой может и не нужно, но и экономить сильно не стал бы хотя я так понял что проц у тебя вроде не сильно горяч...) главное охлад систему откручивать "нежно" и по очереди(там у винтиков номера написаны) и закручивай также... А за одно можно и вентиль обслужить (заменить(вроде ты писаол что у тебя какие-то проблемы с ним)) Если конечно решишься и уверен в своих силах... А то если и куллер сдохнет и термуха, можно или не работоспособную систему получить или проц спалить, и второй чип (фиг знает что это, контроллер что-ли, видюхи то в ноуте нет)... Но тут уж конечно от срока давности покупки зависит(и проблемы вентиля) и желания лезть в ноут ещё раз когда проблема о себе заявит)
А диск проще достать и или в сам магаз отнести, или померить и уже точно искать размер))
Я пытался вкатиться в изометрию и получилось такое (pico8) https://rubel.itch.io/mr-meow-studio Вообще, было желание сделать более серьёзный изометрический платформер, но в этой игре многие плевались от неудобных прыжков по платформам.
if collision_line(x-15,y+20,x+15,y+20,o_floor,1,1)//если под героем пол
{
if gravity<>0//если на героя действует гравитация
{
gravity=0//перестать увеличивать скорость падения
vspeed=0//перестать падать
sprite_index=s_stand//назначить спрайт стояния
y=floor(y)//выровнять координату до целого числа
while collision_line(x-15,y+20,x+15,y+20,o_floor,1,1)
y-=1//вытаскивать из пола наверх пока не прекращается столкновение с полом
y+=1//теперь поставить ровно на пол
fly=0//флаг полёта выставить в 0
}
}
else//иначе (если под героем нет пола)
if gravity==0//если на героя не действует гравитация (то есть он стоит или бежит)
&& fly==0//и если не летит при этом
{
if !collision_line(x-15,y+20,x+15,y+20,o_floor,1,1)//если под героем нет пола (ВТФ, это просто повторная проверка?)
{
sprite_index=s_jump//выставить спрайт прыжка
gravity=0.3//и выставить гравитацию
}
}
Забудь этот ужас, посмотри как устроен мой EX-802, который я когда-то написал на КОД за пару дней. Мало того что там нет этой дури с тайлами, так там ещё есть генерация. Считай, процедурный генератор данжей у тебя уже есть, можешь себе забирать.
Всё это делается изи. Есть событие DrawGUI где всё движение камеры уже учтено. Это не ебаные фреймворки на HTML5 где нужно вручную всё пересчитывать.
Сохранение делается через with, лёгкий набросок:
var f = file_text_open_read("........");
with o_saving_prototype {
file_text_write_stringln(f,asset_name+"|"+string(x)+"|"+string(y));
}
file_text_close(f);
Загрузка примерно так же только нужно будет распарсить строку. Для тех объектов что должны сохраняться нужно парентом указать o_saving_prototype Переменная asset_name должна хранить название актуального объекта. Я бы не стал полагаться на название самих ассетов и сделал бы словарь соответствия строка-объект.
Чтобы не парсить строку можно воспользоваться структурами данных примерно так:
//Создаём словари для x и y
var map_x = ds_map_create();
var map_y = ds_map_create();
//Заполняем объектами
with o_saving_prototype {
map_x[? asset_name] = x;
map_y[? asset_name] = y;
}
//Записываем в файл обе структуры
var f = file_text_open_read("........");
file_text_write_stringln(f,ds_map_write(map_x));
file_text_write_stringln(f,ds_map_write(map_y));
file_text_close(f);
//Очищаем память
ds_map_destroy(map_x);
ds_map_destroy(map_y);
С гуями:
var texture = ScreenCapture.CaptureScreenshotAsTexture();
Без интерфеса можно через рендер текстуру картинку захватить, так чуть больше строчек кода получится конечно. Или через тот же ScreenCapture и вырубать интерфейс за кадр до снятия скриншота.
Пользуясь случаем, хочу сказать, что есть еще литература и даже на русском (но не утверждаю, что ее полезно и обязательно читать, особенно новичкам)
Шаблоны игрового программирования
Возможно найдёшь что-нибудь в играх на Ludum Dare 38
Хочу как-нибудь воспользоваться тем, что у меня имеется локальный архив понравившихся игрушек и написать на Гамин подборку того, мимо чего тут прошли. Вот эта игра точно там будет. Постоянно нужно возвращаться, так ещё и концовок уйма.
Ну, есть исключения всё же... Stacking например. Там много способов, найти их все - даже челендж.
Какие папки заводить и как хранить ассеты. Конечно, никто не мешает делать так же как было и ГМС2.3 даже предлагает по умолчанию такую структуру.
Я только начал делать проект, а без фильтров по типу ресурсов это выглядит как форменный пиздец. БЫло бы переключение фильтров быстрым действием(по шорткату или одной кнопки) - я бы по-другому на это всё смотрел.
Раньше тоже было спорно. Я, например часто комнаты дублирую, а в GMS2 ещё и наследую. Мне нахер не сдался там код, который должен вызываться один раз за всю игру, а именно - на старте. Кроме того лезть в creation code дико неудобно. Именно потому я его последний раз использовал лет 6 назад.
Да, в GMS2.2 можно драг-н-дропом объекты из панели ресурсов переносить в список событий чтобы автоматом создать событие столкновения с ним. Можешь даже в GMS7dev это проверить.
Я сам не очень понимаю пока чем это чревато. Могу привести цитату из обновления пока что
По логике other.myVar должно вроде прокатить, т.к. other содержит в себе структуру. Лично я всегда использовал второй вариант, т.к. считал что other - это что-то типа ссылки на объект и мне в любом случае нужно брать id чтобы не профакапиться.
Object variables, судя по всему.
Или self.id если тебе нравится использовать self.
С хуя ли это сюрприз? Справку читал?
self можно использовать только для адресации локальных переменных, т.е. реально
self.x = 10
Звучит как
(-1).x = 10
В то время как id инстанса - довольно большое число.
Если ты в левый объект передаёшь self то ты передаёшь эту -1 а не id инстанса. В твоём примере это car.human. И если ты будешь использовать эту переменную в контексте объекта car, то там будет -1 и указывать будет на свой контекст, а не на контекст конкретного инстанса как ты задумывал.
self - это пережиток прошлого, что и написано в справке. Так что просто забудь про него.
Может, удастся сделать ещё одну учётку?
Я тут нашёл туториал пошаговый, как привязать лицензию. Надо будет потом включил свой ноут и тоже глянуть, всё ли у меня в порядке)
В Angband'е. :-)
Судя по написанному тут и тут, нужно выполнить следующие требования:
1) Win 10 активирована;
2) Лицензия Win 10 привязана к учётной записи Микрософта.
После этого можно переставлять винду и указывать учётную запись, к которой была привязана лицензия.
Блин геморная модель... Но всё-же диск реально по менять более-менее спокойно(разве что с верхней крышкой гемор)...
Кстати если внутрь полезешь, я всёж рекомендовал-бы полностью разобрать, и уже решить и проблему куллера и может даже термопасту сменить(самой дорогой может и не нужно, но и экономить сильно не стал бы хотя я так понял что проц у тебя вроде не сильно горяч...) главное охлад систему откручивать "нежно" и по очереди(там у винтиков номера написаны) и закручивай также... А за одно можно и вентиль обслужить (заменить(вроде ты писаол что у тебя какие-то проблемы с ним)) Если конечно решишься и уверен в своих силах... А то если и куллер сдохнет и термуха, можно или не работоспособную систему получить или проц спалить, и второй чип (фиг знает что это, контроллер что-ли, видюхи то в ноуте нет)... Но тут уж конечно от срока давности покупки зависит(и проблемы вентиля) и желания лезть в ноут ещё раз когда проблема о себе заявит)
А диск проще достать и или в сам магаз отнести, или померить и уже точно искать размер))
Собственно Dr. Web Live USB, на который я сослался, это тоже Линуксовый дистрибутив, и там читает NTFS.
https://free.drweb.ru/aid_admin/
Быстрее чем разбираться что там у Майкрософта.
если проблема с ноутом не в диске, то вынуть диск и юзать как внешний х)
Я пытался вкатиться в изометрию и получилось такое (pico8) https://rubel.itch.io/mr-meow-studio
Вообще, было желание сделать более серьёзный изометрический платформер, но в этой игре многие плевались от неудобных прыжков по платформам.
o_player > Step
Но это скроллит только вправо. Вот в обе стороны:
(всё верно, одна строка ВМЕСТО двух)
А вот вертикально:
Забудь этот ужас, посмотри как устроен мой EX-802, который я когда-то написал на КОД за пару дней. Мало того что там нет этой дури с тайлами, так там ещё есть генерация. Считай, процедурный генератор данжей у тебя уже есть, можешь себе забирать.
А, мерцание зелёной линии? Это просто так называемый Z-fighting, когда на одной z-глубине (дистанции до камеры) рисуются 3д примитивы
Нашёл немного скриншотов, если кому интересно. Это уже с версии ГМС2.
https://forum.hellroom.ru/index.php?topic=19040.0
Вот тебе диалоговая система
А, так это вроде как встроенное поведение у диалога и должно быть?
https://www.dropbox.com/s/3o3h7sr9ji8t0du/Dialogue4-1.1.zip?dl=0 - EXE и файл скрипта (нужен)
https://www.dropbox.com/s/czvc4m9i52r8gdr/Dialogue4-1.1.gmk?dl=0 - исходник.
Не, ну просто я на ГМ8.1 (7 лет назад) уже делал формы с вложенными элементами.
https://www.dropbox.com/s/lf7xl4das1vfsi8/GM%20GUI%201.0.exe?dl=0
Собственно и исходник вот раздам пожалуй:
https://www.dropbox.com/s/r978sknztz6qxxr/GM%20GUI%201.0.gmk?dl=0
Всё это делается изи. Есть событие DrawGUI где всё движение камеры уже учтено. Это не ебаные фреймворки на HTML5 где нужно вручную всё пересчитывать.
Сохранение делается через with, лёгкий набросок:
Загрузка примерно так же только нужно будет распарсить строку.
Для тех объектов что должны сохраняться нужно парентом указать o_saving_prototype
Переменная asset_name должна хранить название актуального объекта. Я бы не стал полагаться на название самих ассетов и сделал бы словарь соответствия строка-объект.
Чтобы не парсить строку можно воспользоваться структурами данных примерно так:
Способов много разных есть
Да. Вдогонку:
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps