кстати вопрос который меня мучает как создавать таймер на муй гуй?
писать timer[от 1 до 32764] не вариант есть какие нибудь идеи?

я посмотрел короче муй с помощью текста и знаете что он даже не доходит до 100) когда доходит до рандомное число от 1 до 100 примерно(могу ошибаться) он опять становится 2 так что писать таймер[от 1 до 100] вариант)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
22
Steal nerves, в 2 функции наоборот делай с наибольший уменшать с учетом если у 1 функции вырос и запоминает макс числа а там он находит и уменшает и переносит в новое место иначе у тя там в массиве появит не используемые ячейки. Я знаю что ты так умееш! Просто и новичку обьясни =)
27
Просто и новичку обьясни =)
вроде так, если правильно понял
local integer a = 0
local timer t
loop
exitwhen i>a
if timer[a]==GetExpiredTimer() then
вы находите нужный индекс a, теперь делаете дела всякие, чистите удаляете и прочее
если вы дальше не собираетесь использовать timer[a] удаляете сначала, чтобы в памяти не висел
потом смещаете структуру с "i" на "a" , в счетчике i-1 становится на 1 меньше и циклом меньше перебегать будешь
set timer[a] = timer[i]
set i=i-1
endif
set a = a - 1
endloop
set t = null
27
Ельнур, тебе ссылку скинул с примером
+в графических редакторах нет действия "создать таймер", только в JNGP. вызвать можно через действие CS: set t =CreateTimer(). и прежде всего таймер вызывает функцию. Вам придется все равно писать функцию вызова. Иначе, просто крепите событие запуска таймера на триггер, очень неудобная штука.
там на гуи легко (пишу по памяти, в редактор лень лезть):
Триггер инициализации: создаете счетчик Count = 0, объявляете массив timer[] и другие массивы для хранения
Триггер А: создать таймер timer[Count], храните все данные в массивах типа unit[Count], interger[Count] и пр, прикрепляется событие вызова этого таймера на триггер Б, запустить таймер, прибавляете счетчик set Count=Count+1.
Триггер Б:
Цикл А до Count
if timer[A]==GetExpiredTimer() then
достаете номер А, делаете что-то с данными, например убить unit[A] или нанести урон. Или отнять бонусы integer[A]. Удаляете таймер timer[A], если он вам не нужен.
set timer[A] = timer[Count]
не забудьте перенести данные unit[] integer[] и др с того массива на массив A
set unit[A] = unit[Count]
set integer[A] = integer[Count]
set Count=Count-1
endif
конец цикла
26
Ельнур, обязательно при создании переменной таймера укажи максимальный размер массива. Если не задашь, то timer[2] и далее изначально заданы не будут.
27
У меня такой вопрос, если одновременно запустить кучу таймеров нагрузка возрастет или никакой разницы? можно тогда было бы два таймера запускать +массивы времени заводить. один таймер от начала игры чтобы знать тек время, второй выбирать ближайшее время и запускать очереди. как только истекает ближайшее время, то запускать след.
24
обязательно при создании переменной таймера укажи максимальный размер массива. Если не задашь, то timer[2] и далее изначально заданы не будут.
Плохой совет, лучше создавать таймеры по мере необходимости - если заставить вар создавать несколько тысяч таймеров при старте карты, то можно очень быстро упереться в лимит операций в потоке.
26
Плохой совет, лучше создавать таймеры по мере необходимости
И как на GUI это сделать?
27
8gabriel8, я думаю он имел в виду, что вряд ли когда-нибудь картодел наделает 8192 таймера и упрется в лимит массива. Такое вряд ли осуществимо. По мере возможности.

Или как я предложил, использовать на всю игру два таймера +массивы времени. Мне вот интересно можно ли сделать чтоб чисто плавно игралось
28
prog, лучше вообще не создавать несколько тысяч таймеров
вар очень плохо переваривает большое количество таймеров
Steal nerves, а нафига 2?
можно 1 таймер с небольшим периодом
27
nvc123, это как 1 таймер с небольшим периодом
а нафига 2?
основной таймер - запускаем при старте игры на 999999 сек. от него можно узнать тек время (есть спец функции)
функции
истекшее время - сколько прошло времени с момента запуска
native TimerGetElapsed (timer whichTimer) returns real
оставшее время - сколько время осталось до истечения
native TimerGetRemaining (timer whichTimer) returns real
основное время - время, которое вводили при запуске таймера. можете узнать
native TimerGetTimeout (timer whichTimer) returns real
запускаемый таймер - работает по массивам времени. вот например: запустить через 20 сек,
set time[a]= тек время + 20 сек. 
берем пробегаем по массивам ищем ближайшее время. если массивы пусты, то запускаемый таймер отдыхает
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.