Вторник, 26 Ноября 2024, 13:44

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Подскажите насчет смены объекта..
respectumДата: Понедельник, 17 Февраля 2014, 22:47 | Сообщение # 1
был не раз
Сейчас нет на сайте
Хотелось бы узнать, как сделать, чтобы 1 объект сменялся на другой через рандомное кол-во времени.
HSPДата: Понедельник, 17 Февраля 2014, 23:09 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Создаешь обьект 1 (object1) с событием Create:
Код

Time = 0 // таймер на ноль
LifeTime = 10 // максимальное значение таймера (время через которое произойдет какое-то действие)

Добавляешь в этот обьект 1 (object1) событие Step:
Код

Time += 1 // каждый кадр увеличиваем значение таймера на 1
if(LifeTime<=Time) // если таймер больше или равен максимальному значению таймера, то выполняется следующее действие
{
instance_create(x,y,object2) // создается обьект 2 (object2) в координатах X,Y - координаты нашего обьекта 1 (object1)
instance_destroy() // удаляем обьект 1 (object1)
}


Сообщение отредактировал HSP - Вторник, 18 Февраля 2014, 14:49
zzzzzaДата: Вторник, 18 Февраля 2014, 14:07 | Сообщение # 3
участник
Сейчас нет на сайте
HSP, зачем создавать новый/удалять старый, для этого придумана функция instance_change("объект, на который нужно сменить","цифра 1 или 0(1-в новом объекте выполняется событие create, 0 -не выполняется)")
В Create:
Код
alarm[0]=random_range(room_speed,room_speed+60)

В Alarm[0]:
Код
instance_change(obj_2,1)


Сообщение отредактировал zzzzza - Вторник, 18 Февраля 2014, 14:07
Quad69Дата: Вторник, 18 Февраля 2014, 14:16 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Create:
alarm[0]=10

Alarm 0:
instance_change(Объект,true)
ЛеонидДата: Вторник, 18 Февраля 2014, 14:38 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Цитата maksim1221232 ()
Create:
alarm[0]=10

Alarm 0:
instance_change(Объект,true)

Все хорошо, только alarm надо рандомный. Легче всего так:
Код
alarm[0]=random(минимальное кол-во шагов, максимальное кол-во шагов)
HSPДата: Вторник, 18 Февраля 2014, 15:03 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Цитата zzzzza ()
HSP, зачем создавать новый/удалять старый, для этого придумана функция instance_change("объект, на который нужно сменить","цифра 1 или 0(1-в новом объекте выполняется событие create, 0 -не выполняется)")

Дело в том, что на моей практике я никогда не пользовался instance_change() (мне не требовалась замена одного обьекта на другой), чаще всего мне нужно либо удалить, либо создать, поэтому мой метод немного примитивный, но работает безотказно, так же как твой.

Добавлено (18.02.2014, 14:52)
---------------------------------------------
Извиняюсь, за свой "просто ужасный код, к тому же работающий не так, как нужно" (С) Гуру Леонид
PS: Работает он корректно.

Вот новый:
Создаешь обьект 1 (object1) с событием Create:
Код

Time = 0 // таймер на ноль
LifeTime = random(100) // максимальное значение таймера (время через которое произойдет какое-то действие)

Добавляешь в этот обьект 1 (object1) событие Step:
Код

Time += 1 // каждый кадр увеличиваем значение таймера на 1
if(LifeTime<=Time) // если таймер больше или равен максимальному значению таймера, то выполняется следующее действие
{
instance_change(object2,1) // заменяем обьект, в котором выполняется код (object1), на обьект 2 (object2) (by zzzzza)
}

Добавлено (18.02.2014, 15:03)
---------------------------------------------

Цитата Леонид ()
Все хорошо, только alarm надо рандомный. Легче всего так:
Код
alarm[0]=random(минимальное кол-во шагов, максимальное кол-во шагов)


Если я, используя твой просто ужасный random(минимальное кол-во шагов, максимальное кол-во шагов), к тому же не существующий, то я получу ошибку "Wrong number of arguments to function or script.". Напомню, что нам нужно получить случайное число, а не ошибку. Советую использовать один из следующих:
Цитата Справка
random(x) Returns a random real number between 0 and x. The number is always smaller than x.

random_range(x1,x2) Returns a random real number between x1 (inclusive) and x2 (exclusive).

либо
Цитата Справка
irandom(x) Returns a random integer number between 0 and x (inclusive when x is an integer).

irandom_range(x1,x2) Returns a random real number between x1 (inclusive) and x2 (inclusive). Both x1 and x2 must be integer values (otherwise they are rounded down).


Сообщение отредактировал HSP - Вторник, 18 Февраля 2014, 14:53
Quad69Дата: Вторник, 18 Февраля 2014, 15:14 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
ЛеонидДата: Вторник, 18 Февраля 2014, 15:21 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Перепутал функцию, да, извиняюсь.
Цитата HSP ()
Вот новый:
Создаешь обьект 1 (object1) с событием Create:
Код

Time = 0 // таймер на ноль
LifeTime = random(100) // максимальное значение таймера (время через которое произойдет какое-то действие)

Добавляешь в этот обьект 1 (object1) событие Step:
Код

Time += 1 // каждый кадр увеличиваем значение таймера на 1
if(LifeTime<=Time) // если таймер больше или равен максимальному значению таймера, то выполняется следующее действие
{
instance_change(object2,1) // заменяем обьект, в котором выполняется код (object1), на обьект 2 (object2) (by zzzzza)
}


Ты понимаешь, что есть такая вещь, как alarm'ы? Зачем делать такой тупой таймер, который будет работать всю игру и только нагружать производительность (вряд ли это серьезно скажется, но все равно)? Это крайне нерационально.
HSPДата: Вторник, 18 Февраля 2014, 15:27 | Сообщение # 9
почетный гость
Сейчас нет на сайте
Цитата Леонид ()
тупой таймер

Все разными способами делают таймер, alarm[] это тоже таймер, и работает он так же как и мой

Цитата Леонид ()
который будет работать всю игру

Он перестанет работать после того как обьект удалится

Цитата Леонид ()
только нагружать производительность

А теперь рубрика "Эксперименты" (Специально для Леонида)


Сообщение отредактировал HSP - Вторник, 18 Февраля 2014, 15:50
Quad69Дата: Вторник, 18 Февраля 2014, 15:34 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Цитата HSP ()
Он перестанет работать после того как объьект удалится

Я так не думаю. Так как код в Step'e то проверка все-ровно будет выполнятся, да и код большой.
Лучше использовать alarm, так как события типа: Левая Кнопка Мыши или тот же Alarm[] специально для это сделаны. Так оптимизирование и легче(Меньше кода)





Сообщение отредактировал maksim1221232 - Вторник, 18 Февраля 2014, 15:39
HSPДата: Вторник, 18 Февраля 2014, 15:48 | Сообщение # 11
почетный гость
Сейчас нет на сайте
Цитата maksim1221232 ()
Так оптимизирование

Для тебя тоже
Цитата HSP ()
А теперь рубрика "Эксперименты" (Специально для Леонида)



Сообщение отредактировал HSP - Вторник, 18 Февраля 2014, 15:50
Quad69Дата: Вторник, 18 Февраля 2014, 15:51 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
HSP,
Цитата HSP ()
Создаешь обьект 1 (object1) с событием Create:
Код

Time = 0 // таймер на ноль
LifeTime = random(100) // максимальное значение таймера (время через которое произойдет какое-то действие)

Добавляешь в этот обьект 1 (object1) событие Step:
Код

Time += 1 // каждый кадр увеличиваем значение таймера на 1
if(LifeTime<=Time) // если таймер больше или равен максимальному значению таймера, то выполняется следующее действие
{
instance_change(object2,1) // заменяем обьект, в котором выполняется код (object1), на обьект 2 (object2) (by zzzzza)
}

Вот это я точно могу сказать что этот способ не оптимизированный.

А instance_change(...) я сейчас сам проверю.
HSPДата: Вторник, 18 Февраля 2014, 15:52 | Сообщение # 13
почетный гость
Сейчас нет на сайте
Неужели никто из вас не понимает что instance_change(object2,1) это и есть instance_create(x,y,object2) и instance_destroy() просто в одну строчку?

Сообщение отредактировал HSP - Вторник, 18 Февраля 2014, 15:52
ЛеонидДата: Вторник, 18 Февраля 2014, 16:02 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
Цитата HSP ()
Неужели никто из вас не понимает что instance_change(object2,1) это и есть instance_create(x,y,object2) и instance_destroy() просто в одну строчку?

Неужели ты не понимаешь, что чем меньше код, тем удобнее с ним работать и тем лучше он считается? Ты же делаешь все слишком сложно. Твой таймер в шаге просто ни в какие рамки не лезет, это очень, повторюсь, глупо и нерационально.


Сообщение отредактировал Леонид - Вторник, 18 Февраля 2014, 16:06
HSPДата: Вторник, 18 Февраля 2014, 16:05 | Сообщение # 15
почетный гость
Сейчас нет на сайте
Цитата Леонид ()
Цитата HSP ()
Неужели никто из вас не понимает что instance_change(object2,1) это и есть instance_create(x,y,object2) и instance_destroy() просто в одну строчку?

Неужели ты не понимаешь, что чем меньше код, тем удобнее с ним работать и тем правильнее он считается? Ты же делаешь все слишком сложно. Твой таймер в шаге просто ни в какие рамки не лезет, это очень, повторюсь, глупо и нерационально.


Неужели ты не понимаешь, что "правильный код" это понятие для всех разное, я, например, не переношу ваш аларм и никогда им пользоваться не буду, для меня правильней и удобнее работать с таймером, уж привык я так, простите
ЛеонидДата: Вторник, 18 Февраля 2014, 16:06 | Сообщение # 16
постоянный участник
Сейчас нет на сайте
Цитата HSP ()
Все разными способами делают таймер, alarm[] это тоже таймер, и работает он так же как и мой

В жизни не видел человека, который так делал бы таймер.
HSPДата: Вторник, 18 Февраля 2014, 16:07 | Сообщение # 17
почетный гость
Сейчас нет на сайте
Существует много языков и в некоторых нет аналога alarm[], поэтому мне больше по душе создавать таймер

Добавлено (18.02.2014, 16:07)
---------------------------------------------

Цитата Леонид ()
В жизни не видел человека, который так делал бы таймер.

Хорошо, тогда сделай нам таймер без alarm[], мне интересно как иначе можно
Quad69Дата: Вторник, 18 Февраля 2014, 16:19 | Сообщение # 18
заслуженный участник
Сейчас нет на сайте
Цитата HSP ()
Неужели никто из вас не понимает что instance_change(object2,1) это и есть instance_create(x,y,object2) и instance_destroy() просто в одну строчку?

Раз у тебя были отличия в Fps значит эти функции как-то отличаются.

Цитата HSP ()
я, например, не переношу ваш аларм и никогда им пользоваться не буду

Чем он мог не угодить? Так оптимизирование и код меньше.

Добавлено (18.02.2014, 16:19)
---------------------------------------------

Цитата maksim1221232 ()
Существует много языков и в некоторых нет аналога alarm[]

Но в GM всё же есть. Почему бы его не использовать?
HSPДата: Вторник, 18 Февраля 2014, 16:27 | Сообщение # 19
почетный гость
Сейчас нет на сайте
Цитата maksim1221232 ()
Он перестанет работать после того как объьект удалится

Я так не думаю. Так как код в Step'e то проверка все-ровно будет выполнятся, да и код большой.


Второй эксперимент:


Добавлено (18.02.2014, 16:24)
---------------------------------------------
Цитата maksim1221232 ()
я, например, не переношу ваш аларм и никогда им пользоваться не буду

Чем он мог не угодить? Так оптимизирование и код меньше.

Цитата maksim1221232 ()
Существует много языков и в некоторых нет аналога alarm[]

Но в GM всё же есть. Почему бы его не использовать?


я привык делать таймеры, поэтому таймеры для меня единственный правильный способ

Добавлено (18.02.2014, 16:27)
---------------------------------------------
Цитата maksim1221232 ()
Раз у тебя были отличия в Fps значит эти функции как-то отличаются.

не забывай, что на FPS влияет не только код, но и количество обьектов в комнате

к тому же в первом методе выполняется одна строчка кода, а во втором две, небольшое падение FPS при выполнении большого кода очивидно


Сообщение отредактировал HSP - Вторник, 18 Февраля 2014, 16:29
Quad69Дата: Вторник, 18 Февраля 2014, 16:31 | Сообщение # 20
заслуженный участник
Сейчас нет на сайте
Цитата HSP ()
как только i становится равна 300 происходит удаление обьекта, в дебаггере я вижу что напротив моей переменной "error" - такой переменной не существует, следовательно при попытке увеличить несуществующую переменную Game maker выдаст ошибку, но он ее не выдает

Это удаление объекта.
А если нужно будет изменить спрайт объекта, а не удалить его то что тогда?
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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