|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
17.03.2016, 20:31
|
#1
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Посроение юнитов как в Warcraft 2/Warcraft 3
Доброго времени суток, Булчане!
Решился я на новый игровой проект спустя долгое время. Хочу запилить стратегию, а так как лучшей в мире стратегией старой школы я считаю только и только Warcraft (Старкрафт крут, но Варик больше мне по душе, другие же вообще не зацепили, разме что Age of Empires 2), то и решил пилить его.
В качестве движка выбрал Unity (хочу мультипратформу быструю, в т.ч. и мобилки, давно мечтал сделать хотя бы частично-полноценный Варик без всяких эмуляторов), открыл её для себя заново. За два вечера набросал создание и выделение персонажей, их передвижение в место "тыка". Но вот встала конкретная проблема - хочется реализовать красивые расстановки войск как в тех же Вариках, особенно хочется постигнуть как это делается в третьем Варике. Там персонажи выстраиваются определёнными фигурами (3 перса встают в линию, 4 перса квадратом, 5 - буквой П и т.д., причём всё это относительно угла под которым они шли). Может кто-нибудь подсказать теорию как это сделать? Хотя бы более простой вариант как в варкрафте 2 - там один юнит вставал ровно в тыкнутую току, а остальные выделенные вставали вокруг него.
upd Никогда не замечал что в третьем Варике юниты строятся ещё и по типам атак - ближний, дальний, очень дальний. Столько лет играл и никогда не придавал этому значения... Пока хочу реализовать хотя бы простейшее постороение прямоугольником, без выпендрежа и всяких поисков пути, тупо по прямой поверхности. У меня появился топорный "лобовой" вариант - берём первого попавшегося из выбранных юнитов, его назначаем главным, посылаем в тыкнутую точку, попутно узнаём вектор направление движения. И относительно этого ставим других выбранных юнитов по нужной форме, форму соответственно вычисляем исходя из количества выбранных юнитов.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
Последний раз редактировалось St_AnGer, 17.03.2016 в 22:58.
|
(Offline)
|
|
17.03.2016, 23:43
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Посроение юнитов как в Warcraft 2/Warcraft 3
Тригонометрия.
Сперва вычисляешь ширину и высоту прямоугольника для построения, корень числа юнитов:
var units = 5; var w = Math.ceil(Math.sqrt(units)); var h = Maht.floor(Math.sqrt(units));
Далее у тебя есть текущее среднее положение юнитов, и цель куда нужно идти, по сути они есть - центры. Берешь вектор между ними - вот тебе и поворот твоего построения.
Далее немного 2д математики с векторами и будет готово.
Лучше всего такие вещи набрасывать на бумаге, или если оперируешь JS'ом, очень удобно на jsfiddle используя canvas2d делать такие тесты и эксперименты.
Перед построением можешь сортировать список юнитов по их "приоритету", чтобы сперва были ближний бой, а потом дальний.
Если такой подход реализуешь, там уже и придумаешь с разными другими формациями и вариациями.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
18.03.2016, 13:32
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Посроение юнитов как в Warcraft 2/Warcraft 3
Сообщение от moka
var units = 5; var w = Math.ceil(Math.sqrt(units)); var h = Maht.floor(Math.sqrt(units));
|
если результат вычисления корня не кешируется средой, то h лучше вычислить из соображений
h=ceil(units/w)
Аналогичную задачу решаю, когда нужно компактно (таблицей) вывести на экран заранее неизвестное количество объектов
A=floor(sqrt(N));
B=ceil(N/A);
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
18.03.2016, 17:15
|
#4
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Посроение юнитов как в Warcraft 2/Warcraft 3
Сообщение от impersonalis
если результат вычисления корня не кешируется средой, то h лучше вычислить из соображений
h=ceil(units/w)
Аналогичную задачу решаю, когда нужно компактно (таблицей) вывести на экран заранее неизвестное количество объектов
A=floor(sqrt(N));
B=ceil(N/A);
|
Микро оптимизация, но выглядит чутка лучше, согласен.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:08.
|