Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Как найти всех юнитов между 2-мя точками
Я столкнулся с одной проблемой, вобщем мне нужно найти всех юнитов между 2-мя точками, чтобы потом добавить их в группу...
Я знаю, есть функция: Код:
С ее помощью можно построить rect, с центром в указанной точке(в данном случае, центр между 2-мя локациями), с указанием ширины и высоты, но это подойдет только в том случае, если эти 2 точки находятся на прямой линии, относительно одной из осей(X,Y), а если же они будут находиться по диагонали, построиться всеравно квадратный rect, но не таких размеров, как мне нужно. Также не получается использовать таймер с функцией периодического движения от точки 1 до точки 2...Вар вылетает после нескольких таких выполнений функции, т.к. периодичность функции 0.05 сек. + одновременно могут двигаться не один снаряд, а много + инфа храниться в кэше, приаттачена к таймеру... В общем такой способ не подходит. Кто-нибудь знает другой? |
25.08.2007, 13:03 | #1
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
:D двигаешь точку к другой точке и создаешь еще rect и добавляешь их в регион |
25.08.2007, 13:06 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Цитата:
В смысле двигаешь точку? Действием MoveLocation? Создаешь рект? Я же сказал, что если эти 2 точки будут по-диагонали, рект создастся большой, а мне нужно включить воинов в отряд, которые между 2-мя точками...чтобы было по-понятней представь линию, проведенную от одной точки к другой, воины должны быть включены в отряд только в том случае, если они на ОПРЕДЕЛЕННОМ расстоянии от линии(150)...а если создать rect и из этого ректа впихнуть всех в отряд, туда добавятся не только те, которые на 150 от этой линии, т.к. рект квадратный |
|
25.08.2007, 13:41 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dk
offline
Опыт:
61,843Активность: |
Ректы моно обьединять в регионы, прощитай расстояние между точками подели на 75 и создай столько ректов по диагонали, после чего обьедени...
Код:
|
25.08.2007, 14:07 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
Цитата:
я это и написал ) |
|
25.08.2007, 14:27 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Расстояние между точками = 1000...значит нужно создать 1000/75 = 13.3333 ректов, а потом объединить их в один регион? Да, много че-то их будет...ну попробую...
Стоп, а как мне создать эти ректы по диагонали? Отредактировано Alex_Hell, 25.08.2007 в 15:42. |
25.08.2007, 15:37 | #6
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
сделай 100 ректов, число можно подобрать :): |
25.08.2007, 15:39 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Цитата:
Если делать много ректов будут лаги, легче создать снаряд, движущийся от точки p до точки p2 каждые 0.05 сек. + добавляющий в группу новых юнитов, которые в радиусе 150 от него, НО так не получается...я об этом уже писал...а таким способом очень муторно |
|
25.08.2007, 15:44 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
Цитата:
кстати тоже вариант,а что у тебя не получается? этот даже лучше так как он точное расстояние добавляет,а там квадратами оно неточное, кстати 0.05 это много, лучше 0.04 или меньше, 0.05 возможно конечно, но это уже для совсем слабых машин |
|
25.08.2007, 15:45 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
Цитата:
Я всегда так делал. У мну всё всегда работало... |
|
25.08.2007, 15:54 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Цитата:
Я вообще-то знаю, что это лучше, если бы все работало норм, я бы не стал глупые способы искать, но ниче не получается...а не получается вот по чему: У меня создается периодический таймер на 0.05 сек. К таймеру аттачатся локации p1, p2, снаряд и еще кое-что. При завершении таймера запускается функция. В ней создается локалка t = GetExpiredTimer(), а потом находятся все приаттаченные к таймеру данные. Потом снаряд двигается в сторону к локации p2. Этот таймер срабатывает каждые 0.05 сек., пока снаряд не достигнет локации p2...в общем около 1 сек. ,т.е. 20 раз в секунду срабатывает этот таймер...но проблема в том, что таких снарядов НЕ ОДИН, а несколько, значит и таймеров несколько, значит и записей в кэше много(для каждого таймера свои)...от этого создаются лаги, но в конечном счете Вар вообще вылетает с ошибкой! Поэтому такой способ не получается реализовать, хотя снарядов не много(всего 4), а если будет больше... |
|
25.08.2007, 15:55 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
хм... сделать тебе это что ли :) и кстати кэш никогда не выбрасывал вар с фатал еррором на моей памяти,а вот в рб мог че-то не то ты сделать |
25.08.2007, 16:06 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Цитата:
Делать я умею, уже делал! Цитата:
Какраз это и был RB+Cache, называемый SCV...а как по-твоему я мог записать без RB в кэш юнита или локацию? |
||
25.08.2007, 16:17 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
я и так знаю, что ты юзал, я говорю, что ты мог че-то там не так вернуть, бывает иногда :): и из-за этого фатал |
25.08.2007, 16:43 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Цитата:
С эти я обращаться умею(научился на собственном примере )...Возвращается все то, что нужно, иначе оно бы сразу вылетело с ошибкой, а так вылетает только после нескольких законченных таймеров(несколько снарядов уже долтели от p1 до p2), такчто это не из-за моей ошибки! Я даже после полного окончания таймера, после его уничтожения, стираю все записи в кеше под хендлом этого таймера, такчто это не из-за перегрузки кэша всякими ссылками...просто когда много этих снарядов летит(тут их 4, а после когда они долетят, запускаются следующие 4...после этого и вылазит ошибка), походу кэш забивается, но яж очищаю его, такчто не знаю из-за чего |
|
25.08.2007, 17:40 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
Кеш не может забиваться, ибо его запас ограничен памятью твоего винта. |
25.08.2007, 18:22 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
Цитата:
хехе, наверно дело не в таймерах,а в триггерах :), ты наверно убираешь триггер когда он выполняется,а потом еще пытаешься с ним что-то сделать (не помню точно как этот краш получается, но сейчас найду как ) |
|
25.08.2007, 18:30 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,747Активность: |
Я не проверял код ни на ошибки ни на правельность...
Код:
Отредактировано Jon, 27.08.2007 в 18:20. |
25.08.2007, 18:32 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Цитата:
Нет... я делаю все на таймерах, а не на периодических тригах...никаких действий в коде типа: CreteTrigger() нету...а DestroyTrigger() темболее! Alex_Hell добавил: Цитата:
Ну памяти у меня нормально Alex_Hell добавил: Jon, щас проверю код... Alex_Hell добавил: Jon, что указывать в качестве SIZE? (расстояние между точками = 1000, добавиться должны все на линии от p1 до p2, которые на расстоянии = 150 от этой линии) |
||
26.08.2007, 12:38 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,747Активность: |
Alex_Hell size это на каком растоянии от линии будут включатся юниты в группу
|
26.08.2007, 14:30 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|