Иногда, нам нужно сделать рандомное создание объекта в определенных местах, и недавно я нашел способ, как это сделать. Для начала создадим три объекта: o_cntrl, rnd_obj, obj. Теперь, в Create объекта o_cntrl пишем:
Код
repeat(irandom_range(1,instance_number(rnd_obj))){ rnd_o=instance_find(rnd_obj,irandom_range(0,instance_number(rnd_obj)-1)) if !rnd_o.c_cr{ rnd_o.c_cr=1 xx=rnd_o.x yy=rnd_o.y instance_create(xx,yy,obj) }}
Теперь объясню поподробнее:
Код
repeat(irandom_range(1,instance_number(rnd_obj)))
Это повторение рандома от 1 раза до количества раз, равных количеству объектов rnd_obj.
Тут выбирается один из объектов rnd_obj, для дальнейшего спауна obj. Также следует учесть тот факт, что номер объекта отсчитывается от 0, потому я и написал:
Код
instance_number(rnd_obj)-1
Код
if !rnd_o.c_cr{
Тут мы проверяем, создан ли уже объект obj на месте rnd_obj.
Код
rnd_o.c_cr=1
Если не создан - сообщаем компьютеру, что этот объект теперь занят
Код
xx=rnd_o.x yy=rnd_o.y instance_create(xx,yy,obj)
И наконец-то создаем объект. Теперь осталось только открыть объект rnd_obj и в Create написать:
Код
c_cr=0
Теперь расставляем по комнате rnd_obj и ставим в углу объект o_cntrl. Запускаем игру в режиме дебага, и перезапускаем несколько раз через окно дебага. Всё, рандом готов. Надеюсь, что этот урок кому-то пригодится. Исходник
Недавно, мне нужно было сделать выбор рандомного имени для объекта врага. Сделал я это таким вот образом: Создал ини файл, назвав его 'imena.ini' и вписал туда 10 имен вот таким образом:
Иногда, нам нужно сделать рандомное создание объекта в определенных местах
Для этого "рандома" можно найти решение гораздо проще. В create:
Код
instance_create(random(room_height),random)room_width),choose(типа объекты через запятую) alarm[0]=room_speed/2
Тоже самое в Alarm 0. Вот тебе и рандом. Конечно не оптимизированный, но рандом. Хотя у тебя лучше раз в 100. Лови +. А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
по первой части урока создается впечатление, что разрабы на гм настолько суровы, что реализуют через объекты даже абсциссу и ординату. серьезно, часто встречаются случаи, когда объекты создаются только для того, чтобы хранить координаты какой-нибудь точки. и не спрашивайте меня, почему нельзя было просто вогнать всё в массив. даже, если бы шел упор на удобность (то бишь возможность расставить точки самостоятельно в редакторе комнат), можно было бы все равно подсуетиться и сохранить все необходимые значения в массив, а объекты выкинуть из памяти (удалить)
HaGe, я думаю, все этим грешили/грешат (как в моём случае). Как никак, а для понимания это легче. Да и память это не так нагружает (хотя понятно, что там чуть-чуть нагрузил, здесь чуть-чуть нагрузил и всё лагает). В данном случае расстановка этих самых объектов гораздо легче и удобнее, ведь прописывать пачку координат каждой комнате довольно... эм... долго?..
Таки зачастую действительно проще расставить объекты-спаунеры и действовать через них. Но все же полезность таких тем стремится к нулю. А их все создают и создают. Смысл от того что ты тут опубликовал решение своей проблемы? Если у кого то возникнет такая же ситуация, то я ну очень сомневаюсь что он найдет твою тему.
И опять же, если делаешь уроки - не нужно делать такую нечитабельную простыню. Делай исходник и прикладывай сюда, это будет намного лучше. Спасибо за внимание. Ghaarp
Таки зачастую действительно проще расставить объекты-спаунеры и действовать через них.
ЦитатаHaGe ()
даже, если бы шел упор на удобность (то бишь возможность расставить точки самостоятельно в редакторе комнат), можно было бы все равно подсуетиться и сохранить все необходимые значения в массив, а объекты выкинуть из памяти (удалить)
поясню. при старте комнаты можно занести координаты объектов-спаунеров в массив. таким образом для спавна не понадобится каждый раз обращаться к другим объектам.
HaGe, так вот мы и не отрицаем, что можно. Мы просто говорим, что если комнат очень много, то проще расставлять такие объекты, а не заносить переменные в массив. Оба способа хороши и имеют право быть, дело лишь в том, что один саааааамую малость проще, а другой сааааааамую малость менее памятозатратный (...вот это слово вышло...).
Overdrave, он не об этом говорит, а о том что расставить можно объекты, а в их создании провести какую-то операцию, которая бы запомнила координаты и куда то их поместила, после чего непосредственно объекты удалила. Но фишка в том, что это уже настолько незначительная оптимизация, что чтобы ей заниматься, у тебя проект уже должен быть вылизан просто до блеска в остальном, что бывает...никогда. Ghaarp
Таки зачастую действительно проще расставить объекты-спаунеры и действовать через них. Но все же полезность таких тем стремится к нулю. А их все создают и создают. Смысл от того что ты тут опубликовал решение своей проблемы? Если у кого то возникнет такая же ситуация, то я ну очень сомневаюсь что он найдет твою тему.
И опять же, если делаешь уроки - не нужно делать такую нечитабельную простыню. Делай исходник и прикладывай сюда, это будет намного лучше. Спасибо за внимание.
Ну, я ведь не создал тему про то, как склепать платформер с помощью Drag & Drop. Урока похожего на мой я не видел, вот и решил написать, вдруг кому-то понадобится