Отрисовка инвентаря по сетке
| |
gameshulker | Дата: Среда, 14 Апреля 2021, 16:26 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Так, сначала спасибо заранее всем кто не пройдёт мимо.
Такой вопрос, у меня есть enum resources {}, в котором, очевидно вещи, количество которых изначально нулевое (к примеру gold = 0, iron = 0, diamond = 0 и т.д.). И в draw GUI я просто отрисовываю спрайт с иконкой(icoIron, icoGold и т.д.) нужного предмета и этот самый resources.diamond, resources.iron и так далее. Я хочу сделать так, чтобы отрисовывалось только то, что у меня есть и по порядку.
Вот как это есть сейчас: https://imgur.com/a/u47fJfA
Вот код который у меня есть
create: enum resources {iron = 0, gold = 0, wood = 0}
drawGUI: draw_text(10, 10, icoIron);draw_text(20, 10, icoGold); //И так для всех предметов draw_sprite(icoIron, -1, 5, 10);draw_sprite(icoGold, -1, 15, 10); //И так для всех предметов
|
|
| |
Fire_Phoenix | Дата: Четверг, 15 Апреля 2021, 06:36 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| Цитата gameshulker ( ) Я хочу сделать так, чтобы отрисовывалось только то, что у меня есть и по порядку.
Правильно ли я понимаю, Вы хотите выводить те ресурсы, количество которых > 0?
Если да, то это можно сделать через цикл. Но, в независимости от этого, обратите внимание:
Исходя из цитаты в руководстве:
Цитата Data Types > Enums: ... Note that you cannot modify the values for any enum constant after it has been created.
следует, что код:
Код create: enum resources {iron = 0, gold = 0, wood = 0}
создает константу, а не переменную. То есть, получается, что Вы не сможете менять количество (iron, gold, wood) в resources.
Могу Вам предложить, использовать для этого массив. К сожалению, ассоциативных массивов в GML нет (насколько я помню ), но можно сделать, к примеру так:
Объявляем массив с тремя ресурсами:
Код resources = [0, 0, 0];
Далее ключи для массива:
Код enum resourcesKeys {iron = 0, gold = 1, wood = 2};
А потом можно использовать их, вместо индекса, для изменения количества:
Код resources[resourcesKeys.iron]++;
или для вывода:
Код draw_text(10, 10, resources[resourcesKeys.iron]);
Добавлено (15 Апреля 2021, 07:56) ---------------------------------------------
Код draw_sprite(icoIron, -1, 5, 10); draw_sprite(icoGold, -1, 15, 10);
Все ico_... для удобства можно тоже сделать одним объектом (спрайтом), объединив все иконки в одно изображение. Примерно так:
Код var frames_count = <количество>; resourcesIco = sprite_add(<fname>, frames_count, 0, 0, 0, 0);
И рисовать как:
Код draw_sprite(resourcesIco, resourcesKeys.iron, 5, 10); draw_sprite(resourcesIco, resourcesKeys.gold, 15, 10);
Тогда, цикл для вывода ресурсов, количество которых > 0, будет таким:
Код resourcesDrawCount = 0;
for (var i = 0; i < 3; i++) { if (resources[i] > 0) { draw_text(10 + resourcesDrawCount * 10, 10, resources[i]); // количество. draw_sprite(resourcesIco, i, 5 + resourcesDrawCount * 10, 10); // спрайт с иконкой. resourcesDrawCount++; } }
Сообщение отредактировал Fire_Phoenix - Четверг, 15 Апреля 2021, 08:49 |
|
| |
gameshulker | Дата: Четверг, 15 Апреля 2021, 22:57 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Fire_Phoenix, окей, спасибо. Но у меня как всегда куча глупых вопросов, я сделал для примера изображение 24х8, с тремя иконками. В движке разбил в одном спрайте (название icons) это всё на 3 кадра по 8х8 пикселей, var frames_count = 3; var resourcesIco = sprite_add(icons, frames_count, 0, 0, 0, 0);
Вот тут почему-то отрисовка несуществующего спрайта (trying to draw non-exiting sprite) draw_sprite(resourcesIco, i, 5 + resourcesDrawCount * 10, 10); // спрайт с иконкой.
Но я ещё толком не копался, пока что буду думать.
А так, ты снова подкинул мысль. Теперь у вещей есть id, надо сделать табличку с id'шниками, и грамотно всё располагать в спрайте с иконками.
Исходя из справки fname - имя файла, а в файле должны быть спрайты в линию. С размером длину линии/кол-во спрайтов в линии. Я по сути разобрался в функции, но не понимаю как это применитьДобавлено (15 Апреля 2021, 23:35) --------------------------------------------- Fire_Phoenix, в очередной раз спасибо тебе большое! Почему ты не снимаешь туториалы/уроки? Я думаю тебя ждал бы успех в этом, на русском языке, тем более именно про новый GMS 2 нет ничего путёвого, только мануалы и видео переводить остаётся, хорошо что в английском я не совсем дубовый. Инвентарь то что надо, я уже давно рыл их, и ничего путёвого не нашёл почти. За месяц уже даже как-то дизмораль пошла. Я вот так и хотел, чтобы добавление вещей не было на миллиард строк кода, а тут я могу в массив добавить нужно значение и всё. Спасибо ещё раз!
Сообщение отредактировал gameshulker - Четверг, 15 Апреля 2021, 23:11 |
|
| |
Fire_Phoenix | Дата: Четверг, 15 Апреля 2021, 23:41 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| gameshulker, пожалуйста
Сообщение отредактировал Fire_Phoenix - Четверг, 15 Апреля 2021, 23:42 |
|
| |
|