XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
criadone
WarMaker
offline
Опыт: 381
Активность:
:: Кривенький Регион ->
Извините за noob'эвский вопрос.
Как сделать регион произвольной формы?
Например такой:
___
.../....\
|........|
|........|
.\.......|
..\......|
...|___|
Старый 15.10.2006, 15:30
T Mon

offline
Опыт: 3,825
Активность:
Насколько я знаю, регионы могут быть только прямоугольной формы.
Старый 15.10.2006, 15:33
FoK_KruGer
<3 Vocal Trance
offline
Опыт: 19,940
Активность:
Цитата:
Насколько я знаю, регионы могут быть только прямоугольной формы.

эще круглой (прогой какрйто делаетс)
Старый 15.10.2006, 15:38
criadone
WarMaker
offline
Опыт: 381
Активность:
Я тоже так думаю, но где-то читал, что можно иначе...
Старый 15.10.2006, 15:39
GadenbIsh
Просто Гад
offline
Опыт: 70,430
Активность:
С помощью группы регионов - других средств в ВЕ нет, только может сторонними прогами
Старый 15.10.2006, 15:41
criadone
WarMaker
offline
Опыт: 381
Активность:
И полюбому должны быть не только круглые!

criadone добавил:
Я вот и хочу найти сторонний способ. Мож кто знает. А насчёт групп - как-то неудобно.
Старый 15.10.2006, 15:45
Iron
Листовой
offline
Опыт: 24,427
Активность:
Все прще. Регион сам по себе, это переменная. Просто WE автоматом заносит ректы (области, которые по ошибке тоже называют регионами), в отдельные переменные, и мы не замечаем, что в триггерах используем именно сгенерированные переменные регионов, а не сами прямоугольники (ректы) которые создавали.
В jass существует функция позволяющая сшивать несколько ректов в один регион (переменную), т.е. регион может быть произвольной формы (точнее его форма ограничена многоугольником с прямыми углами).
Так что ждем jass-еров.
Старый 15.10.2006, 21:10
criadone
WarMaker
offline
Опыт: 381
Активность:
Вот! То что надо. Сшивать.
Джазеры! Помогите.

criadone добавил:
Вот! То что надо. Сшивать.
Джазеры! Помогите.
Старый 15.10.2006, 21:25
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Юзай нэйтивы и да прибудет с тобой сила:
Код:
native Rect (real minx, real miny, real maxx, real maxy) returns rect
native RegionAddRect (region whichRegion, rect r) returns nothing
Старый 15.10.2006, 22:07
Iron
Листовой
offline
Опыт: 24,427
Активность:
exploder, с твоего позволения распишу для всех.

Код:
native Rect (real minx, real miny, real maxx, real maxy) returns rect

данная функция служит для создания ректа, т.е. real minx, real miny - нижний левый угол, real maxx, real maxy - верхний правый угол.

Код:
native RegionAddRect (region whichRegion, rect r) returns nothing

Непосредственно сшивание (пришивание) ректа к региону, где region whichRegion - регион к которому пришивают (переменная типа регион), а rect r - пришиваемый рект.

Есть вопрос, а можно ли в качестве rect r использовать стандартные ректы (не созданные с помощью native Rect, а просто созданные в редакторе)? Если да, то как? Или же можно использовать регион как рект, и сшить несколько регионов?

Iron добавил:
Т.е. есть ли функция обратной конверсии прямоугольного региона в рект?
Типа:
Код:
region2rect (region R)
Старый 16.10.2006, 13:56
adic3x

offline
Опыт: 108,439
Активность:
Ваще - то регион задается четырмя точками, поэтому кривым его никак не сделать.
Можно конечно попробовать точки раскидать так:
•••/\••• 1,1 2,1
••/••\••
•/••••\• -1,-1 4,1
но это вряд - ли будет работать...
Лучше созда паруй регионов и не ломай себе голову над такого рода вопросами)
Старый 16.10.2006, 14:22
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
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
Все прще. Регион сам по себе, это переменная. Просто WE автоматом заносит ректы (области, которые по ошибке тоже называют регионами), в отдельные переменные, и мы не замечаем, что в триггерах используем именно сгенерированные переменные регионов, а не сами прямоугольники (ректы) которые создавали.

Хех... действительно путаница. Редактор создает именно прямоугольники (rect) на не регионы (region). Так что он генерирует глобальные пременные типа rect на каждый регион, созданый в нем. Остается только объединить эти переменные вида: gg_rct_Region_ХХХ в один регион (region) и добавить ему события.
---
Кстати округление - ограничение самого редактора. Если создавать вручную то, по моему, нету ограничений на кратность координат.
Старый 16.10.2006, 15:48
zibada

offline
Опыт: отключен
Цитата:
Кстати округление - ограничение самого редактора. Если создавать вручную то, по моему, нету ограничений на кратность координат.

каким образом? см. blizzard.j, как раз редактор ничего не округляет, а втупую создает регион, добавляет туда 1 rect и регистрирует событие.
а регионы уже дискретны.
событий же типа "юнит вошел в рект" реально не существует - вот почему изменение rect-а после регистрации такого события ни на что не влияет.
Старый 16.10.2006, 15:57
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
каким образом? см. blizzard.j, как раз редактор ничего не округляет, а втупую создает регион, добавляет туда 1 rect и регистрирует событие.

Нет я имею ввиду редактор ограничивает самого юзера, когда тот мышой создает рект. Он (редактор) не позволяет создать рект с произвольными координатами, а лишь с координами каратными там четверти тайла. А уж потом сам генератор кода "втупую" генерит рект и полученными координатами, кратными четверти тайла, хотя в принципе там могут быть и любые координаты...

exploder добавил:
Цитата:
а втупую создает регион, добавляет туда 1 rect и регистрирует событие.

Я смотрел только, что исходник мапы с одним регионом с собыитем входа в него. У меня редактор объявляет пременную типа rect, а не region и работает с ней напрямую! То есть редактор вообще грубо говоря не оперурет с переменными типа region, а работает только с rect. Хотя GUI упорно зовет их Regions.
Старый 16.10.2006, 16:18
Iron
Листовой
offline
Опыт: 24,427
Активность:
Цитата:
Я смотрел только, что исходник мапы с одним регионом с собыитем входа в него. У меня редактор объявляет пременную типа rect, а не region и работает с ней напрямую! То есть редактор вообще грубо говоря не оперурет с переменными типа region, а работает только с rect. Хотя GUI упорно зовет их Regions.

Вот, то что я и хотел узнать. Но вот вопрос, если мы создадим глобальную переменную типа region, обьеденим в нее несколько ректов, то можно ли будет оперировать ей с помощью GUI, или же работа с регионами осуществляется тока в jass-e, а GUI переваривает тока ректы?
Старый 16.10.2006, 17:32
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
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
!, теперь понятно... Мне почему-то думалось, что TriggerRegisterEnterRectSimple - нэйтив...
Iron, в GUI обычного редактора опеределенно не сделаешь регион из нескольких ректов, в JASS, вполне...
Старый 16.10.2006, 18:42
Iron
Листовой
offline
Опыт: 24,427
Активность:
exploder, не, ну ща полазаю по WEU, там ведь забацали визуализацию RegionAddRect как обычное действие в GUI. Помню кто-то даже выкладывал статью о том, как забацать свою функцию в GUI.
Старый 16.10.2006, 21:07
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 20:52.