Рандомное появление объектов.
|
|
Just1ucky | Дата: Среда, 06 Августа 2014, 12:38 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Доброго времени суток, дорогие форумчане! Подскажите пожалуйста, как сделать рандомное появление объектов из-за комнаты? И чтобы они двигались по горизонтали. Второй день ищу примеры, смотрю уроки, а так же читал форум, но все не то. Везде не объясняется или что-то лишнее.
Вообщем хочу, что объекты не только вылетали рандомно из этих точек, которые показаны на картинке, а чтобы вылетали из любой точки по оси "Y".
Знаю, что вы все добрые и отзывчивые и надеюсь на вашу помощь:)
Сообщение отредактировал Just1ucky - Среда, 06 Августа 2014, 12:39 |
|
| |
Raven84 | Дата: Среда, 06 Августа 2014, 13:10 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| что тут сложного? В событии создания объекта пишем y=random(600) ,где 600 (пикселей) высота комнаты.Добавлено (06.08.2014, 13:02) --------------------------------------------- Вообщем вот полный код,чтобы еще и двигались: Код y=random(600) n=irandom(1) if n=0 {x=-50 hspeed=10} else {x=850 hspeed=-10} Добавлено (06.08.2014, 13:09) --------------------------------------------- Вот тебе даже полное объяснение,разжевывание кода: y=random(600) ,оператор random генерирует случайное число от 0 до числа в скобках,в данном случае 600. Т.е. y может быть равно 54, 160.8, 421, 37.3 .Короче как целые так и дробные числа. n=irandom(1) ,оператор irandom генерирует случайное ЦЕЛОЕ число от 0 до числа в скобках, в данном случае 1. Т.е. n может быть равно либо 0 либо 1. if n=0 {x=-50 hspeed=10} else {x=850 hspeed=-10} ,это проверка: если n=0 то объект появляется слева и получает скорость в 10 пикселей за шаг вправо, иначе (если n равно 1), то все наоборот. Тут важно понимать,что 850 это значение чуть больше ширины комнаты (т.е. у тебя ширина допустим 800, то тут указываем 850). Добавлено (06.08.2014, 13:10) --------------------------------------------- Как видишь код всего из 3 строчек. А ты два,целых ДВА!!! дня ищешь как это сделать. Отсюда совет: учи язык программирования.GML прост до нельзя. Удачи! Появятся вопросы-задавай.
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
|
|
| |
миха | Дата: Среда, 06 Августа 2014, 13:20 | Сообщение # 3 |
почти ветеран
Сейчас нет на сайте
| Raven84, лучше: y=random(room_height) x=choose(-50,room_width+50) hspeed=x*(-1)*0.2
так размеры комнаты можно брать любые - все будет ок
|
|
| |
Just1ucky | Дата: Среда, 06 Августа 2014, 13:22 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| Цитата Raven84 ( ) Вообщем вот полный код,чтобы еще и двигались: Код
y=random(600) n=irandom(1) if n=0 {x=-50 hspeed=10} else {x=850 hspeed=-10}
А как сделать, чтобы постоянно создавались объекты? А то 1 раз только вылетает объект, притом всегда из одной точки. Думаю, что как-то через Alarm.
Цитата Raven84 ( ) Отсюда совет: учи язык программирования.GML прост до нельзя. Я учу по примерам и по отдельным случаям, чтоб наглядно все было
|
|
| |
Raven84 | Дата: Среда, 06 Августа 2014, 13:26 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| миха, Цитата y=random(room_height) x=choose(-50,room_width+50) hspeed=x*(-1)*0.2 Согласен! Это вообще идеальный код! Я же лишь тупо хотел донести мысли о том,что нужно мыслить алгоритмами и просто предложил код не оптимизированный,чтобы автор понял суть.
Добавлено (06.08.2014, 13:26) --------------------------------------------- Just1ucky, Цитата А как сделать, чтобы постоянно создавались объекты? Для этого создай другой объект и задай таймер. К примеру имя вылетающих обектов у тебя BULLET. Тогда создай объект и назови его к примеру SHOOTER и помести один раз в комнату. В нем в событии create задай переменную таймер, к примеру: А в событии Step пропиши: Код if timer>=20 {instance_create(x,y,BULLET) timer=0} timer+=1 Вот и вся беда.
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
Сообщение отредактировал Raven84 - Среда, 06 Августа 2014, 13:28 |
|
| |
миха | Дата: Среда, 06 Августа 2014, 13:30 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| Just1ucky, а чтобы объекты из разных точек лезли, надо перед кодом вставить random_set_seed(seed), и вместо seed подставить что-то, что постоянно меняется. я обычно использую аремя, но сейчас некогда объяснять)
|
|
| |
Just1ucky | Дата: Среда, 06 Августа 2014, 13:34 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Работает:) Но когда перезапускаю игру, то объекты вылетают из того же месте.
|
|
| |
Raven84 | Дата: Среда, 06 Августа 2014, 13:48 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Just1ucky, Цитата Работает:) Но когда перезапускаю игру, то объекты вылетают из того же месте. Мы так с михой за тебя всю игру сделаем!!! Для того,чтобы всегда в разных местах вылетало и после перезапуска достаточно добавить оператор randomize() и никакой random_set_seed не нужен. Просто напиши это в событии создания вылетающего объекта. Ну как теперь? Работает ? :-)
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
Сообщение отредактировал Raven84 - Среда, 06 Августа 2014, 13:49 |
|
| |
Just1ucky | Дата: Среда, 06 Августа 2014, 13:56 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Цитата Raven84 ( ) Ну как теперь? Работает ? :-)
Да, все супер:D Теперь я понял принцип работы!:)
Спасибо огромное! Вы лучшая поддержка по gms
Сообщение отредактировал Just1ucky - Среда, 06 Августа 2014, 13:56 |
|
| |
миха | Дата: Среда, 06 Августа 2014, 14:15 | Сообщение # 10 |
почти ветеран
Сейчас нет на сайте
| Raven84, точно) я что то го не юзаю совсем, надо бы)
|
|
| |