Вторник, 18 Мая 2021, 18:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Отрисовка инвентаря по сетке (Как отображать resources если кол-во более 0)
Отрисовка инвентаря по сетке
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
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Отрисовка инвентаря по сетке (Как отображать resources если кол-во более 0)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг