criadone
WarMaker
offline
Опыт:
381Активность: |
:: Кривенький Регион ->
Извините за noob'эвский вопрос. Как сделать регион произвольной формы? Например такой: ___ .../....\ |........| |........| .\.......| ..\......| ...|___| |
15.10.2006, 15:30 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
T Mon
offline
Опыт:
3,825Активность: |
Насколько я знаю, регионы могут быть только прямоугольной формы. |
15.10.2006, 15:33 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FoK_KruGer
<3 Vocal Trance
offline
Опыт:
19,940Активность: |
Цитата:
эще круглой (прогой какрйто делаетс) |
|
15.10.2006, 15:38 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
criadone
WarMaker
offline
Опыт:
381Активность: |
Я тоже так думаю, но где-то читал, что можно иначе... |
15.10.2006, 15:39 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
GadenbIsh
Просто Гад
offline
Опыт:
70,430Активность: |
С помощью группы регионов - других средств в ВЕ нет, только может сторонними прогами |
15.10.2006, 15:41 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
criadone
WarMaker
offline
Опыт:
381Активность: |
И полюбому должны быть не только круглые!
criadone добавил: Я вот и хочу найти сторонний способ. Мож кто знает. А насчёт групп - как-то неудобно. |
15.10.2006, 15:45 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
Все прще. Регион сам по себе, это переменная. Просто WE автоматом заносит ректы (области, которые по ошибке тоже называют регионами), в отдельные переменные, и мы не замечаем, что в триггерах используем именно сгенерированные переменные регионов, а не сами прямоугольники (ректы) которые создавали. В jass существует функция позволяющая сшивать несколько ректов в один регион (переменную), т.е. регион может быть произвольной формы (точнее его форма ограничена многоугольником с прямыми углами). Так что ждем jass-еров. |
15.10.2006, 21:10 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
criadone
WarMaker
offline
Опыт:
381Активность: |
Вот! То что надо. Сшивать.
Джазеры! Помогите. criadone добавил: Вот! То что надо. Сшивать. Джазеры! Помогите. |
15.10.2006, 21:25 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Юзай нэйтивы и да прибудет с тобой сила:
Код:
|
15.10.2006, 22:07 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
exploder, с твоего позволения распишу для всех.
Код:
данная функция служит для создания ректа, т.е. real minx, real miny - нижний левый угол, real maxx, real maxy - верхний правый угол. Код:
Непосредственно сшивание (пришивание) ректа к региону, где region whichRegion - регион к которому пришивают (переменная типа регион), а rect r - пришиваемый рект. Есть вопрос, а можно ли в качестве rect r использовать стандартные ректы (не созданные с помощью native Rect, а просто созданные в редакторе)? Если да, то как? Или же можно использовать регион как рект, и сшить несколько регионов? Iron добавил: Т.е. есть ли функция обратной конверсии прямоугольного региона в рект? Типа: Код:
|
16.10.2006, 13:56 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Ваще - то регион задается четырмя точками, поэтому кривым его никак не сделать.
Можно конечно попробовать точки раскидать так: •••/\••• 1,1 2,1
••/••\•• •/••••\• -1,-1 4,1 но это вряд - ли будет работать...
Лучше созда паруй регионов и не ломай себе голову над такого рода вопросами) |
16.10.2006, 14:22 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
zibada
offline
Опыт: отключен
|
ADOLF
Цитата:
чего?! каждый rect - прямоугольник, задавамый 4-мя числами - координатами левой нижней и правой верхней точки. region - произвольное объединение rect-ов, кажется, с точностью до четверти тайла (т.е. квадрат 64х64). т.е. по сути - битовая маска размера 4 * высота * ширина карты в тайлах. так что их регион может быть хоть "дырявым", хоть вообще включать несколько несвязных областей, но вот "кривым" его не сделать. нативки, для тех, кому лень смотреть common.j: native CreateRegion takes nothing returns region создать новый пустой регион. native RemoveRegion takes region whichRegion returns nothing удалить регион. native RegionAddRect takes region whichRegion, rect r returns nothing добавить все ячейки, входящие в rect. native RegionClearRect takes region whichRegion, rect r returns nothing исключить все ячейки, входящие в rect. native RegionAddCell takes region whichRegion, real x, real y returns nothing добавить ячейку, включающую точку, заданную координатами. native RegionAddCellAtLoc takes region whichRegion, location whichLocation returns nothing добавить ячейку, включающую точку, заданную объектом location. native RegionClearCell takes region whichRegion, real x, real y returns nothing удалить ячейку, включающую точку, заданную координатами. native RegionClearCellAtLoc takes region whichRegion, location whichLocation returns nothing удалить ячейку, включающую точку, заданную объектом location. ну еще есть функции native TriggerRegisterEnterRegion takes trigger whichTrigger, region whichRegion, boolexpr filter returns event native TriggerRegisterLeaveRegion takes trigger whichTrigger, region whichRegion, boolexpr filter returns event constant native GetTriggeringRegion takes nothing returns region constant native GetEnteringUnit takes nothing returns unit constant native GetLeavingUnit takes nothing returns unit для работы с событиями, связанными с регионами. для регистрации соответствующих событий для нужного триггера. Отредактировано !, 16.10.2006 в 15:41. |
|
16.10.2006, 14:53 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Хех... действительно путаница. Редактор создает именно прямоугольники (rect) на не регионы (region). Так что он генерирует глобальные пременные типа rect на каждый регион, созданый в нем. Остается только объединить эти переменные вида: gg_rct_Region_ХХХ в один регион (region) и добавить ему события. --- Кстати округление - ограничение самого редактора. Если создавать вручную то, по моему, нету ограничений на кратность координат. |
|
16.10.2006, 15:48 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
zibada
offline
Опыт: отключен
|
Цитата:
каким образом? см. blizzard.j, как раз редактор ничего не округляет, а втупую создает регион, добавляет туда 1 rect и регистрирует событие. а регионы уже дискретны. событий же типа "юнит вошел в рект" реально не существует - вот почему изменение rect-а после регистрации такого события ни на что не влияет. |
|
16.10.2006, 15:57 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Нет я имею ввиду редактор ограничивает самого юзера, когда тот мышой создает рект. Он (редактор) не позволяет создать рект с произвольными координатами, а лишь с координами каратными там четверти тайла. А уж потом сам генератор кода "втупую" генерит рект и полученными координатами, кратными четверти тайла, хотя в принципе там могут быть и любые координаты... exploder добавил: Цитата:
Я смотрел только, что исходник мапы с одним регионом с собыитем входа в него. У меня редактор объявляет пременную типа rect, а не region и работает с ней напрямую! То есть редактор вообще грубо говоря не оперурет с переменными типа region, а работает только с rect. Хотя GUI упорно зовет их Regions. |
||
16.10.2006, 16:18 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
Цитата:
Вот, то что я и хотел узнать. Но вот вопрос, если мы создадим глобальную переменную типа region, обьеденим в нее несколько ректов, то можно ли будет оперировать ей с помощью GUI, или же работа с регионами осуществляется тока в jass-e, а GUI переваривает тока ректы? |
|
16.10.2006, 17:32 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
zibada
offline
Опыт: отключен
|
exploder
когда ты в редакторе указываешь событие Unit Enters Region, он создает код, в котором вызывается функция вроде TriggerRegisterEnterRectSimple. лезем в blizzard.j и смотрим, что сия функция делает: function TriggerRegisterEnterRectSimple takes trigger trig, rect r returns event local region rectRegion = CreateRegion() call RegionAddRect(rectRegion, r) return TriggerRegisterEnterRegion(trig, rectRegion, null) endfunction какой там точности был рект, где он еще хранился, и что ты с ним потом делаешь - вызываемой native функции TriggerRegisterEnterRegion наплевать - она оперирует с регионами, а у них точность до 1/4 тайла.. ! добавил: Iron в gui обычного редактора про region-ы - ни слова. в WEU они есть. |
16.10.2006, 18:01 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
!, теперь понятно... Мне почему-то думалось, что TriggerRegisterEnterRectSimple - нэйтив...
Iron, в GUI обычного редактора опеределенно не сделаешь регион из нескольких ректов, в JASS, вполне... |
16.10.2006, 18:42 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
exploder, не, ну ща полазаю по WEU, там ведь забацали визуализацию RegionAddRect как обычное действие в GUI. Помню кто-то даже выкладывал статью о том, как забацать свою функцию в GUI.
|
16.10.2006, 21:07 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|