Просмотр полной версии : делаю стратегию - пара вопросов
Начал сегодня делать стратегию на флэше (тип - риал-тайм, ну вроде РедАлерта или СтарКрафта). Потихоньку продвигаюсь - но и проблемы, которые с ходу мне не решить, уже появились
Основной принцип такой - при нажатии на кнопку (например) появляется "юнит" (например soldat) из определенной точки (дверь казармы). Ну то есть обычный
duplicateMovieClip ("soldat", ima1, deep)
setProperty (ima, _x, ...);
...
и т д. ima с каждым юнитом увеличивается на единицу, глубина тоже - ну вобщем, все как обычно. А в самом клипе (soldat) уже написан собственно код, определяющий поведение юнита - если попадает в границы рамочки - значит он "обводится" (становится активным), если обведен и нажата кнопка мыши в каом-то месте на поле - значит он отправляется туда - и т. д. и т. п. Всё это уже работает - а теперь собственно проблемы
1) Так как глубина клипов задается при их копировании - солдаты перекрывают друг друга и здания как вздумается - то есть задний юнит вполне может загораживать переднего и т. д. Как можно сделать динамическое обновление "глубины" - то есть, если клип спускается "вниз" ("приближается") - то выходит на передний план - и наоборот?
2) В принципе, даже более важное - так как решив этот вопрос можно будет будет пойти на хитрости и забить на 1-ый -
как сделать "препятствия" - то есть, чтобы юниты не могли проходить друг-сквозь-друга и сквозь здания? Если бы это были статические препятствия небольшого кол-ва - например скалы - запрогить их было бы не сложно - но тут ведь может быть любое кол-во юнитов, которые постоянно движутся и должны соответственно влиять друг на друга
надо делать карту-сетку и в ней прописывать - где свободная клетка, где пустая. на основе карты генерить граф путей и по нему волновым алгоритмом искать дорогу для юнита.
По первому вопросу.
Игра в изометрии? Тогда делай глубину по координатам, а не последовательности появления на карте.
глубина = _y * максимальное значение поля по x + _x
надо делать карту-сетку и в ней прописывать - где свободная клетка, где пустая. на основе карты генерить граф путей и по нему волновым алгоритмом искать дорогу для юнита.
Можно поподробнее? Хотя бы про сетку (юнитов пока и "тупыми" можно сделать). Это что-то вроде двухмерного массива например?
По первому вопросу.
Игра в изометрии? Тогда делай глубину по координатам, а не последовательности появления на карте.
глубина = _y * максимальное значение поля по x + _x
Да, "упрощенная" изометрия (то есть без разворота на 45 градусов). Тут причем такая проблема возникает, что если юниты стоят на одной "высоте" - то есть, на одном удалении от камеры - один из них изчезнет - т к глубина получится одинаковой
но координаты то у них разные?
но координаты то у них разные?
У меня всё-таки не полноценная изометрия - то есть, фактически, от х глубина не зависит - только от у. Поэтому просто так х-координату к у добавлять нельзя - а то получится вдруг х5+у15=х15+у5 - у двух клипов с разными координатами все равно получится одинкаовая глубина. Думаю, сделать что-то вроде - у*100+х - то есть, у, как более значимая в вычислении глубины переменная имеет основной вес, а х - просто как мелкое дополнение, как раз чтобы глубины не совпадали
Можно поподробнее? Хотя бы про сетку (юнитов пока и "тупыми" можно сделать). Это что-то вроде двухмерного массива например?
сетка - это просто массив клеток, на которых условно разделено поле игры с их координатами. граф - это двухмерный массив объектов-клеток, где для каждой клетки прописаны массив возможных "выходов" из нее - соответственно, для клетки, окруженный всеми свободными клетками, этот массив будет содержать 8 выходов, если вокруг есть занятные клетки - убиваем соответствущие элементы. имея граф, мы можем вычислить путь из одной клетки в другую, обходя занятые.
У меня всё-таки не полноценная изометрия - то есть, фактически, от х глубина не зависит - только от у. Поэтому просто так х-координату к у добавлять нельзя - а то получится вдруг х5+у15=х15+у5 - у двух клипов с разными координатами все равно получится одинкаовая глубина. Думаю, сделать что-то вроде - у*100+х - то есть, у, как более значимая в вычислении глубины переменная имеет основной вес, а х - просто как мелкое дополнение, как раз чтобы глубины не совпадали
Я тебе об этом и писал. Посмотри внимательно.
Хм, что-то странное происходит при вставке в код мувиклипа следущего кода -
glu=y //глубина равна координате у мувика (для упрощения пока без х)
this.swapDepths(glu) //данный мувик отправляется на соответствующую шлубину
начинаются чудеса - после первого мувиклипа все последующие пропадают и начинает безбожно тормозить флэш. Попробовал различные вариации - либо примерно такой же, либо нет эффекта. Кто может сказать, в чем дело?
Ромастый
04.08.2005, 20:50
Написал давным-давно для схожих целей простенький прототипчик - регулирует глубину залегания клипов в зависимости от их координаты Y:
MovieClip.prototype.sortDepths = function() {
var movies = [];
for (var i in this) {
if (typeof (this[i]) == "movieclip") {
movies.push(this[i]);
}
}
//
var Sorter = function (a, b) {
if (a._y>b._y) {
return 1;
}
if (b._y>a._y) {
return -1;
}
else {
return 0;
}
};
movies.sort(Sorter);
for (var i = 0; i<=movies.length-1; i++) {
movies[i].swapDepths(i);
}
};
Может чем поможет...
так все правильно, надо смотреть что еще кроме этого делается.
Может чем поможет...
Вроде бы не совсем то - но может быть пригодится...
так все правильно, надо смотреть что еще кроме этого делается.
Нашел, в чем дело, правда легче от этого стало ненамного
при следуещем коде в мувиклипе -
glu=y*100+x
this.swapDepths(glu)
всё работает практически идеально, но...
С какого-то перепугу за пределами видимого поля флэшки (поэтому только щас и обнаружил) начинает создаваться КУЧА таких же юнитов. Один за другим, без остановки. То есть я нажимаю "создать одного" - а получается 10, 20, 30... Ес-но, что комп начинает тормозить.
Вот теперь думаю, в чем прикол
уф, вроде бы разобрался - заменил дупликатклип на атачмуви
теперь первая проблема решена (если только потом опять че-нить не вылезет) - спасибо всем, кто помогал :) Теперь осталась тока вторая - и еще десяток, который несомненно возникнет попозже :D
ЗЫ Кто-нибудь может дать ссылку на флэш-стратегии в инете? Хочется посмотреть, на что равняться - да и вобще, как другие их делают
DeadMorozz
05.08.2005, 14:25
интересно... я сейчас как раз сижу расписываю концепт оналайновой взвеси "бойцовского клуба" и "паркана". риалтайма мало, пошажка.
но все равно очень интересно.
а как можно расчитать, что клетка занята?
а если юнитов много, то ведь всё будет загружено до предела.
а как можно расчитать, что клетка занята?
а если юнитов много, то ведь всё будет загружено до предела.
В массиве хранить состояние клетки
если информацию о состоянии клетки хранить в массиве, то как потом узнать, занята ли клетка. нужно ведь как-то её ещё найти в массиве и удалить элементы о теперь уже незанятых клетках.
old_dark_elf
15.08.2005, 01:06
как вариант делаешь матрицу NxM из интежеров, с разными значениями, допустим:
0-путо
11-наш золдатен
12-не наш убер золдатен
21-дерево
22-стена
и т.д.
а потом проверяя - если матр[x;y]<>0 - занято, елс - не занято
когда-то таким макаром сделал пошаговую стратежку без ИИ :) на дельфях...
только я делаю стратегию не пошаговую. как я буду искать в массиве, занята ли клетка или нет, если информация о нужной клетки находится в конце массива и на поле пара десятков юнитов, то как быть?
old_dark_elf
15.08.2005, 02:10
хммм...
а если проверка на наличие препятсятвия будет выполняться когда юнит идет?
т.е. ему нужно пойти на правую(типа 5 на нумпаде - юнит, 6 -право) клетку он смотрит есть ли там припятствиеии если есть вычисляет новый маршрут, кстати поиск нужного пути всеравно нужно будет производить каждый раз заного, что бы учитывать вновь появившиеся препятствия - какой нибудь солдат переместился...
есть идея - сделать вообще без матрицы (правда как выполнить поиск пути в этом случае во флеше я не знаю :() сделать клас "золдатен" с хиттестом на припятствия, т.е. стенки и другие золдатены, и если хитТест - то отодвинуть золдатена назад, короче что-то типа: http://www.silin.fatal.ru/ предпоследний пример (я имею ввиду не отскок, а неналожение, то что они не пересекаются друг с другом)...
есть идея - сделать вообще без матрицы (правда как выполнить поиск пути в этом случае во флеше я не знаю :() сделать клас "золдатен" с хиттестом на припятствия, т.е. стенки и другие золдатены, и если хитТест - то отодвинуть золдатена назад
Не лучший вариант, имхо. К тому же, не к любой графике подходящий
old_dark_elf
15.08.2005, 02:30
это да :) все будет круглое, или овальное (только с не большой разницей между сторонами) :) , зато матрицы нафик не нужны - а сними траблы - что бы найти путь нужна не одна итеррация цикла, а пока он будет искаться, какой-нить другой солдат может уже переместиться... хотя я точно не знаю, как будет вести себя флеш...
у кого какие уже есть решения(примеры).
наверное надо разносить неподвижные препятствия и юнитов.
неподвижные хранить в масиве и на основе этих данных расчитывать траекторию движения юнитов.
а для юнитов проверять при каждом шаге занятосте клетки куда хотим его переместить.
и вообще хорошая идея (стратегия на флэш). надо бы разбить на подтемы и заняться дружно)))
кто возъмется тех задание писать?
только я делаю стратегию не пошаговую. как я буду искать в массиве, занята ли клетка или нет, если информация о нужной клетки находится в конце массива и на поле пара десятков юнитов, то как быть?
Я тебя умоляю.... какое искать, ты знаешь что за клетка и смотришь сразу знапчение ее в массиве.
все же обращение к очень большому массиву будет реально тормозить систему. лучше разнести на много маленьких, опять же по координатам.
все же обращение к очень большому массиву будет реально тормозить систему. лучше разнести на много маленьких, опять же по координатам.
не будет тормозить
все же обращение к очень большому массиву будет реально тормозить систему. лучше разнести на много маленьких, опять же по координатам.
Массив не обязательно должен быть по каждой точке. Разделить поле на квадраты размером пикселей 20, например, и делать массив квадратов.
А на счет юнитов - так вобще им столкновения просчитывать не обязательно друг с другом. Представьте, что идет отряд людей навстречу другому отряду в реальной жизни - они че, пройти друг сквозь друга не смогут и тупо встрянут? Да и лишние страдания игроку тока будут, когда его юниты начнут толкаться и встревать, капая ему на нервы. Играл во много компутерных игр, где юниты не мешались друг-другу - так в глаза прежде всего бросалась не эта "нереалистичность" - а удобство игры.
То есть, остается прогить как препятствия тока здания и препятствия карты (горы и т д). Их во-первых намного меньше, они неподвижны и больше по размерам - то есть квадраты массива можно увеличить и до 50 пикселей а то и больше
Ну а чтобы юниты не сбивались в одного при тычке мышкой "идти туда", делается простой алгоритм - каждому юниту задается не именно та точка, где нажата мышка - а рандомное значение вокруг нее. В результате даже довольно большая толпа вполне красиво выстраивается в квадрат размером столько-то на столько-то пикселей (задается вами, можно сделать в зависимости от кол-ва юнитов в толпе или их размеров)вокруг точки (получается даже что-то вроде построения). И идут к этой точке не как роботы - паралельно друг-другу, а под разными углами, то есть, тоже "реалистично"
если массив содержит инфу о 10000 клетках это не страшно.
а вот теперь попробуйте создать мувиклипы для этих 10000 клеток.
тут ваш флеш и загнется и совсем не из-за массива.
не будет тормозить
попробуй загнать тектовый документ размером 10-20 метров в массив. слово - элемент. а потом поработать с ним. 5-ка вешалась даже при загрузке вроде.
2 Takato
тогда ходить они у тебя будут кучей (выглядеть как один юнит), а по достижении цели противник увидет клонирование армии)))
и чесно я не представляю как может один человек пройти сквозь другова. ну свои еще могут уплотниться и прижаться, а вот как противники будут среляя друг в друга проходить сквозь противника и продолжать путь???
тогда ходить они у тебя будут кучей (выглядеть как один юнит), а по достижении цели противник увидет клонирование армии)))
блин, ты внимательно читал? -_- еще раз -
"ну а чтобы юниты не сбивались в одного при тычке мышкой "идти туда", делается простой алгоритм - каждому юниту задается не именно та точка, где нажата мышка - а рандомное значение вокруг нее. в результате даже довольно большая толпа вполне красиво выстраивается в квадрат размером столько-то на столько-то пикселей (задается вами, можно сделать в зависимости от кол-ва юнитов в толпе или их размеров)вокруг точки (получается даже что-то вроде построения). и идут к этой точке не как роботы - паралельно друг-другу, а под разными углами, то есть, тоже "реалистично""
и чесно я не представляю как может один человек пройти сквозь другова. ну свои еще могут уплотниться и прижаться, а вот как противники будут среляя друг в друга проходить сквозь противника и продолжать путь???
если у тебя запустится алгоритм атаки и при этом не остановится алгоритм движения - это уже проблемы кода игры.
попробуй загнать тектовый документ размером 10-20 метров в массив. слово - элемент. а потом поработать с ним. 5-ка вешалась даже при загрузке вроде.
а я говорю о разумных размерах
10000 вполне хватит для игры, это 100 на 100
Чтобы оценить много это или мало возьмите тетрадку в клетку и отсчитайте 100 клеток в одном направлении.
Ромастый
15.08.2005, 17:55
Массивы это конечно хорошо...
Но вот зря не обратили внимания на трабл, о котором iNils сказал.
С большим количеством двигающихся юнитов стратегия в реальном времени превратится в пошаговую. 10000 конечно перебор, но и 40-50 событий onEnterFrame - это вешь довольно серьезная, способная сильно притормозить машину.
Ромастый
15.08.2005, 19:40
имхо, флэш не очень подходит для стратегий в реальном времени. пошаговые - это уже ближе.
или идти на ухищрения, вроде как отряд из нескольких юнитов обрабатывается как один объект, просто еще учитывается численность группировки. а ля Hmm.
имхо, флэш не очень подходит для стратегий в реальном времени. пошаговые - это уже ближе.
или идти на ухищрения, вроде как отряд из нескольких юнитов обрабатывается как один объект, просто еще учитывается численность группировки. а ля Hmm.
Ты имеешь ввиду пощаговые какого плана? Вроде демиургов - когда на поле n юнитов, которые ходят по очереди, а в остальное время стоят, или типа Героев - где вобще, отдельный "юнит" - это толпа из 48 лучников, например?
old_dark_elf
15.08.2005, 19:57
да в любом случае пошаговые стратегии на флеше сделать проще, чем реал тайм, на что они не были бы похожи...
Ромастый
15.08.2005, 19:58
пошаговые на флэш можно любые делать... тут проблем с тормозами не предвидится.
а идея была заимствовать из героев фишку с юнитом, в котором много тех самых лучников, что поможет снизить нагрузку на проц в реальной стратегии. правда насколько эта идея жизненна для стратегии в реальном временем, вопрос...
юнитов 100 флэш должен потянуть вроде.
вот пример, движется 100 клипов. замедление примерно в 3-4 раза у меня на пне 1000.
но код еще можно оптимизнуть.
юнитов 100 флэш должен потянуть вроде.
вот пример, движется 100 клипов. замедление примерно в 3-4 раза у меня на пне 1000.
но код еще можно оптимизнуть.
Графику надо делать пиксельную и качество ставить low
меня больше волновой алгоритм волнует. если для каждого юнита считать маршрут, то пошаговость обеспечина.
и не хочется каждую секунду проверять для каждого юнита возможность атаки. единственное что лезит в голову это хиттест.
меня больше волновой алгоритм волнует. если для каждого юнита считать маршрут, то пошаговость обеспечина.
и не хочется каждую секунду проверять для каждого юнита возможность атаки. единственное что лезит в голову это хиттест.
Сделать ограниченность прямого хода. Скажем нельзя из одного угла в другой послать, а только на 10-15 клеток. Не удобно, но проще.
DeadMorozz
16.08.2005, 17:01
а идея была заимствовать из героев фишку с юнитом, в котором много тех самых лучников, что поможет снизить нагрузку на проц в реальной стратегии.
Факт - именно удачные метафоры порой спасают положение.
Сталкивался.
Факт - именно удачные метафоры порой спасают положение.
Сталкивался.
Ааа, блин, не напоминайте про Героев - а то я щас точно начну пошаговую делать... :D
Ромастый
16.08.2005, 17:12
а там и до крестиков-ноликов дело дойдет :)
Ааа, блин, не напоминайте про Героев - а то я щас точно начну пошаговую делать... :D
Играл по сетке с братом в Age Of Empires 2. Когда юнитов по сотне у каждого и игроков 8 (мы компьютерных ботов подключили), то тормозил даже мой p4-2800.
Играл по сетке с братом в Age Of Empires 2. Когда юнитов по сотне у каждого и игроков 8 (мы компьютерных ботов подключили), то тормозил даже мой p4-2800.
Гм... Ну это по-мойму неоптимизированность АоЕ. В казаках например тормоза начинаются после нескольких тысяч юнитов - причем на моем пне 4-1500
А уж к третьим героям, сколько бы там юнитов не было, требования вобще смешные... Все-таки у пошаговок преимуществ много... Хотя риал-тайм на флэше смотрится эффектнее, имхо
В казаках например тормоза начинаются после нескольких тысяч юнитов - причем на моем пне 4-1500
Не играл. И они все по отдельности? Жуть.
Не играл. И они все по отдельности? Жуть.
Ага... Представляешь картину - первые полчаса игры - обводишь 500 крестьян - отправляешь в замок тренероваться... Толпа несколько минут туда забегает (!) (здания намного больше юнитов, особенно крепости и т д - практически реальные пропорции). В это время за замком в боевых порядках стоит еще 800 воинов, 200 рабочих рубят лес, работают в шахтах, еще столько же - обрабатывают поля, еще 100 чето строят... У 3-4 компов-противников народу не меньше... И особых тормозов еще нет...
Ромастый
16.08.2005, 19:21
2Takato: Кстать, ты на какую тему игру делаешь? Ежели не секрет, конечно...
2Takato: Кстать, ты на какую тему игру делаешь? Ежели не секрет, конечно...
Хотел/хочу сделать что-то вроде Старкрафта (то есть космос). Ну а пока делаю - у меня нарисованы просто чижики с копьями и казармы с флагами.
А вобще у меня щас времени не особо - и стратежку щас не прогю. Тем более, чем дальше тем больше хочется сделать что-то типа Героев или Дисциплес (не только потому, что пошаговые легче делать).
Хотя риал-тайм на флэше смотрится эффектнее, имхо
уже видел где то?
уже видел где то?
Не, я просто думаю, мнение обывателей какое будет? "О, смотрите, они бегают! О, я обвел их рамочкой и они побежали все в одну точку! Круто, прям как в настоящей стратегии! Неужели такое можно сделать на флэше??..." и т. д. А при виде пошаговой таких восторгов пожалуй не будет
old_dark_elf
17.08.2005, 19:53
это уже было, на этом форуме поройтесь - парочку отыщете...
Не, я просто думаю, мнение обывателей какое будет? "О, смотрите, они бегают! О, я обвел их рамочкой и они побежали все в одну точку! Круто, прям как в настоящей стратегии! Неужели такое можно сделать на флэше??..." и т. д. А при виде пошаговой таких восторгов пожалуй не будет
а мне кажется что такие восторги будут только у людей понимающих как сложно реализовать данный проект на флэше.
а мне кажется что такие восторги будут только у людей понимающих как сложно реализовать данный проект на флэше.
Это понимают и многие из тех, кто и не умеет работать на флэше. Они же юзают игры-флэшки - так стреллялки все видели тысячами, квестов чуть меньше, потом рпг, файтинги - а вот стратегий совсем мало
DeadMorozz
18.08.2005, 18:32
а мне кажется что такие восторги будут только у людей понимающих как сложно реализовать данный проект на флэше.
*рыдает* В точку!
Это понимают и многие из тех, кто и не умеет работать на флэше. Они же юзают игры-флэшки - так стреллялки все видели тысячами, квестов чуть меньше, потом рпг, файтинги - а вот стратегий совсем мало
Не фига. Если человек не понимает продукт изнутри, он ни когда не поймет сложно его делать или нет.
ScaredShard
19.08.2005, 18:37
http://www.jengajam.com/r/Warcraft-Flash-Game
Но там производится крайне ограниченное количество юнитов. Можно софтником код раскурочить. Причем поиск пути там туповатый, но приемлемый для несложной карты.
Это понимают и многие из тех, кто и не умеет работать на флэше. Они же юзают игры-флэшки - так стреллялки все видели тысячами, квестов чуть меньше, потом рпг, файтинги - а вот стратегий совсем мало
дай ссылки на РПГ и стратегии. уж больно любопытно посмотреть. сам что то не натыкался.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.