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
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
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) }
Все хорошо, только 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
Вот новый: Создаешь обьект 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'ы? Зачем делать такой тупой таймер, который будет работать всю игру и только нагружать производительность (вряд ли это серьезно скажется, но все равно)? Это крайне нерационально.
Он перестанет работать после того как объьект удалится
Я так не думаю. Так как код в Step'e то проверка все-ровно будет выполнятся, да и код большой. Лучше использовать alarm, так как события типа: Левая Кнопка Мыши или тот же Alarm[] специально для это сделаны. Так оптимизирование и легче(Меньше кода)
Что-же стало из одной темы в которой один простой вопрос...
HSP, Наверное что-бы сместить объект на 4 пиксели влево ты делаешь так:
Создаешь обьект 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(object2,1) это и есть instance_create(x,y,object2) и instance_destroy() просто в одну строчку?
Неужели ты не понимаешь, что чем меньше код, тем удобнее с ним работать и тем лучше он считается? Ты же делаешь все слишком сложно. Твой таймер в шаге просто ни в какие рамки не лезет, это очень, повторюсь, глупо и нерационально.
Сообщение отредактировал Леонид - Вторник, 18 Февраля 2014, 16:06
Цитата HSP () Неужели никто из вас не понимает что instance_change(object2,1) это и есть instance_create(x,y,object2) и instance_destroy() просто в одну строчку?
Неужели ты не понимаешь, что чем меньше код, тем удобнее с ним работать и тем правильнее он считается? Ты же делаешь все слишком сложно. Твой таймер в шаге просто ни в какие рамки не лезет, это очень, повторюсь, глупо и нерационально.
Неужели ты не понимаешь, что "правильный код" это понятие для всех разное, я, например, не переношу ваш аларм и никогда им пользоваться не буду, для меня правильней и удобнее работать с таймером, уж привык я так, простите
Он перестанет работать после того как объьект удалится
Я так не думаю. Так как код в Step'e то проверка все-ровно будет выполнятся, да и код большой.
Второй эксперимент:
я создал обьект (object0), в нем есть событие Create
Код
i = 0
и step
Код
i+=1 if(i = 300){instance_destroy()}
я запускаю тест с дебаггером и в дебаггере начинаю мониторить переменную i обьекта object0 (object0.i) как только i становится равна 300 происходит удаление обьекта, в дебаггере я вижу что напротив моей переменной "error" - такой переменной не существует, следовательно при попытке увеличить несуществующую переменную Game maker выдаст ошибку, но он ее не выдает
Вывод: При удалении обьекта все переменные этого обьекта удаляются и Step не выполняется
как только i становится равна 300 происходит удаление обьекта, в дебаггере я вижу что напротив моей переменной "error" - такой переменной не существует, следовательно при попытке увеличить несуществующую переменную Game maker выдаст ошибку, но он ее не выдает
Это удаление объекта. А если нужно будет изменить спрайт объекта, а не удалить его то что тогда?