Среда, 27 Ноября 2024, 08:04

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помощь при "выпадении" из ящика предметов
Supr_maksДата: Воскресенье, 17 Мая 2020, 15:46 | Сообщение # 1
частый гость
Сейчас нет на сайте
Помогите сделать так чтобы если есть 2 пресонаж то на него дают бонус. P.s. чтобы они не были заранее известный.
Т.е. может быть как 1-2-3... Так и 1-3-4-2...
Нужен код


У всех в душе пустота...
faridunibodulloДата: Понедельник, 18 Мая 2020, 09:25 | Сообщение # 2
частый гость
Сейчас нет на сайте
item=choose(obj_predmet1,obj_predmet2,obj_predmet3)
instance_create(x,y,item)
CoreДата: Понедельник, 18 Мая 2020, 15:36 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Supr_maks,

irandom();


OpenGOOДата: Понедельник, 18 Мая 2020, 17:40 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Если нужно чтобы бонусы не только выдавались случайным образом, но ещё и не повторялись, то можно воспользоваться ds_list.

Для этого нужно будет создать список ds_list_create() (для начала список можно сохранить в глобальной переменной), затем заполнить его бонусами ds_list_add() и перемешать ds_list_shuffle(). После этих действий уже можно будет доставать случайные бонусы ds_list_find_value(), но для этого нужно будет ещё реализовать механизм последовательного извлечения бонусов из списка.

Когда список будет нужен, его нужно удалить ds_list_destroy().


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
Supr_maksДата: Понедельник, 18 Мая 2020, 20:12 | Сообщение # 5
частый гость
Сейчас нет на сайте
faridunibodullo, А в choose можно добавить только 3 или можно больше?

У всех в душе пустота...
AlexanderBekkerДата: Понедельник, 18 Мая 2020, 21:37 | Сообщение # 6
BekkerDev Studio
Сейчас нет на сайте
Цитата Supr_maks ()
А в choose можно добавить только 3 или можно больше?

Функция choose может принимать до 16-ти аргументов. Если нужно больше, можно пойти на такую хитрость:
Код
item1 = choose(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
item2 = choose(16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31);
item = choose(item1, item2); // item будет присвоено рандомное значение от 0 до 31 включительно

Можно ещё объявить массив, заполнив его нужными элементами, затем при помощи функции irandom выбрать случайный элемент из массива.

P. S. Не уверен насчёт количества аргументов в функции choose, но за Game Maker последний раз я работал ещё в 2012-ом году. Тогда в восьмой версии это ограничение было. Возможно, в GMS 2 его убрали или появились более рациональные способы выборки случайных элементов.


Разработчик, композитор и издатель инди-игр в Steam.
Редактор карт: BekkerDev Level Editor 4
Страница разработчика в Steam
Паблик ВК: BekkerDev Studio


Сообщение отредактировал AlexanderBekker - Понедельник, 18 Мая 2020, 21:38
Raven84Дата: Вторник, 19 Мая 2020, 13:16 | Сообщение # 7
старожил
Сейчас нет на сайте
AlexanderBekker,
Цитата
Возможно, в GMS 2 его убрали

Да, в GMS2 вроде ограничений по кол-ву аргументов в choose нет.
Единственное создатели лишь делают оговорку, что чем больше аргументов, тем медленнее работает функция, ну это и логично.


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
AlexanderBekkerДата: Вторник, 19 Мая 2020, 23:19 | Сообщение # 8
BekkerDev Studio
Сейчас нет на сайте
Цитата Raven84 ()
Единственное создатели лишь делают оговорку, что чем больше аргументов, тем медленнее работает функция, ну это и логично.

Я в своём игровом движке на Java реализовывал эту функцию так:
Код
public Object choose(Object... objs) {
   return objs[random.nextInt(objs.length)];
}
Если у меня — любительского программиста — она работает быстро, то у разработчиков Game Maker и подавно. Так что не думаю, что конструкция их функции сложнее моей.


Разработчик, композитор и издатель инди-игр в Steam.
Редактор карт: BekkerDev Level Editor 4
Страница разработчика в Steam
Паблик ВК: BekkerDev Studio
Raven84Дата: Среда, 20 Мая 2020, 12:20 | Сообщение # 9
старожил
Сейчас нет на сайте
AlexanderBekker, Да это понятно! :)
Я думаю такая оговорка сделана для того, чтобы туда не напихали тысячи (+100500 как говорится) значений, иначе перебор будет идти дольше, только и всего.
А то криворукие могут в сотни объектов напихать в шаг таких функций и потом ломать голову, почему проблемы с оптимизацией. :D


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
  • Страница 1 из 1
  • 1
Поиск:

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