Помогите разобраться с кодом
| |
cosferaps | Дата: Вторник, 10 Апреля 2012, 13:04 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Всем привет ! Я создаю пошаговую стратегию и долго искал хороший пример гексогональной сетки, нашёл . Там всё достаточно понятно, но не для меня. Помогите из знающих, сделать так, чтобы выбранный юнит двигался по сетке с учётом очков действия. Юнит в самом примере не осуществлён, в нём есть только поиск пути. Не понимание вызвало большое кол-во сеток и их взаимосвязанность, никак не разберусь . Помогите, кто может, пожалуйста. Вот сам пример: http://rghost.ru/37505266
GMS MC
|
|
| |
elis1112 | Дата: Вторник, 10 Апреля 2012, 13:36 | Сообщение # 2 |
Igni et ferro
Сейчас нет на сайте
| от такого примера умереть можно разбираясь хотя может все и не так безнадежно
Сообщение отредактировал elis1112 - Вторник, 10 Апреля 2012, 13:37 |
|
| |
cosferaps | Дата: Вторник, 10 Апреля 2012, 16:28 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Фишка в том, что не во всём нужно разбираться , а только в поиске пути. Там определяется начальная и конечная точка пути, путь. Нужно сделать так, чтобы начальная точка имела координаты юнита, а конечная, куда мышкой ткнёшь, просто не могу правильно выделить нужный фрагмент кода, чтобы новые сетки не создавались, чтобы всё происходило на созданных. Остальоное неважно и для меня более понятно, чем сам поиск. Более точно могу сказать, что смотреть нужно самый первый скрипт
GMS MC
|
|
| |
kashey | Дата: Вторник, 10 Апреля 2012, 18:41 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Code if (mouse_check_button_pressed(mb_left)) { ds_grid_set(d_cursor,0,0,[b]v_xx[/b]); ds_grid_set(d_cursor,1,0,[b]v_yy[/b]); v_bench = current_time; v_status = fn_astar(d_map,d_cursor,d_path,v_heur,v_stupid,v_solid,v_limit); v_bench = current_time - v_bench; } if (mouse_check_button_pressed(mb_right)) { ds_grid_set(d_cursor,0,1,[b]v_xx[/b]); ds_grid_set(d_cursor,1,1,[b]v_yy[/b]); v_bench = current_time; v_status = fn_astar(d_map,d_cursor,d_path,v_heur,v_stupid,v_solid,v_limit); v_bench = current_time - v_bench; } В этом куске манипуляции с мышью, жирным выделены переменные которые отвечают за ключевые точки. Отследи по скриптам где они изменяются и зачем и будет тебе ответ.
К стати очень, ну очень интересный пример. Отправил в коллекцию. Никогда не мог вникнуть в матрицы и манипуляции с ними.
|
|
| |
cosferaps | Дата: Вторник, 10 Апреля 2012, 22:55 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| kashey, спасибо, конечно , но с этим я и сам разобрался. Проблема немножечко в другом, не знаю, как правильно сформулировать. Ладно, тогда для уточнения, еслия я для экземпляра объекта напишу в Step: if (mouse_check_button_pressed(mb_left)) {script111()} if (mouse_check_button_pressed(mb_right)){script222()}, где в скриптах содержиться всё, что было в скобках, то все экземпляры будут двигаться по одной и той же сетке или же они для каждого экземпляра будут свои создаваться? Хотя, наверное, туповатый вопрос, но всё-таки.
И ещё, не пойму, как делаются ячейки непроходимыми и можно ли объекты сделать вместо кода, а то как уровни то делать?
GMS MC
Сообщение отредактировал cosferaps - Вторник, 10 Апреля 2012, 22:58 |
|
| |
kashey | Дата: Вторник, 10 Апреля 2012, 23:19 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Quote (cosferaps) все экземпляры будут двигаться по одной и той же сетке Не знаю, заметил ли ты, но в скриптах все время идет обращение к одним и тем же датаструктурам - d_map, d_cursor, d_units, d_mil_sides и d_path. Все они инициализируются из события криэйт, а это значит что создаются они только раз, при создании обьекта контроллера. Уже хотя бы из этого можно сделать вывод, что никаких прочих датаструктур в процессе быть не должно. Далее можно перелопатить скрипт, как это сделал я и не найти там функций создания датаструктур, только их обработки. Вывод один - только если создавать множественные экземпляры обьекта контроллера можно получить это самое множество сеток. Quote (cosferaps) И ещё, не пойму, как делаются ячейки непроходимыми Кажется для непроходимых ячеек предусмотрена специальная переменная. v_solid если я не ошибаюсь. Quote (cosferaps) объекты сделать вместо кода, а то как уровни то делать Обьекты должны только записывать в датаструктуру нужные значения, то есть код непроходимости, например, направляй из обьекта стены через указатель в обьект контроллер. При таком раскладе можно завалить карту обьектами, которые практически не бдут влиять на производительность, потому как содержат только одно действие и миимум встроенных переменных.
|
|
| |
cosferaps | Дата: Вторник, 10 Апреля 2012, 23:29 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| kashey, спасибо за разъяснения А можно по подробнее вот с этим: Quote Обьекты должны только записывать в датаструктуру нужные значения, то есть код непроходимости, например, направляй из обьекта стены через указатель в обьект контроллер. При таком раскладе можно завалить карту обьектами, которые практически не бдут влиять на производительность, потому как содержат только одно действие и миимум встроенных переменных.
GMS MC
|
|
| |
kashey | Дата: Вторник, 10 Апреля 2012, 23:46 | Сообщение # 8 |
постоянный участник
Сейчас нет на сайте
| Ну только псевдокод. Мне лень пока разбирать весь тот ворох кода.
Итак нужно сделать ячейку непроходимой. У нас есть контроллер с сеткой и обьект стена. В криэйт стены пишем: изменить_значение_сетки(контроллер.сетка_проходимости,ячейка_по_икс,ячейка_по_игрек,значение) Все Про функции работы с сетками можно прочесть в справке. Переменные ячеек сетки у тебя на координатах обьекта, нужно только определить на какой ячейке стоит обьект. Формула расчета координат в гексах должна быть где то в скрипте.
Мой тебе совет, бери пока вещи полегче. Для меня это сложно, хотя я уже и не совсем новичок, а тебе я так поимаю это вообще потемки. Лучше сперва пойми как работают датаструктуры, по какому принципу работает астар, ну и сопутствующие вещи. Только потом пожно будет пытаться вникнуть и использовать.
|
|
| |
cosferaps | Дата: Воскресенье, 15 Апреля 2012, 22:11 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| kashey, спасибо, то, что ты объяснил, я прекрасно понял, а остальное мне и ни к чему, да и не понимаю ничего. Даже теже самые аргументы, зачем, что не понятно а приспособить под работу и сделать, как мне надо у меня более менее выходит . Конечно, хорошо было бы со всем этим разобраться, но справку я не особо понимаю в этих местах, а на форумах редко что-то чёткое встречается, а не копипаст справочный. Всё, что мне кажется нужным и понятным, я, конечно, себе скидываю .Добавлено (15.04.2012, 21:55) --------------------------------------------- kashey, кажется, я кое-что забыл спросить . Как мне сделать, чтобы юнит двигался по пути найденному? Добавлено (15.04.2012, 22:11) --------------------------------------------- И ещё, по поводу v_solid: такой переменной нет в fn_astar, она случаем не становится аргументом? Вообще что означают переменные в скобках, точнее, зачем их туда писать? v_status = fn_astar(d_map,d_cursor,d_path,v_heur,v_stupid,v_solid,v_limit)
GMS MC
|
|
| |
kashey | Дата: Вторник, 17 Апреля 2012, 14:32 | Сообщение # 10 |
постоянный участник
Сейчас нет на сайте
| Quote (cosferaps) Как мне сделать, чтобы юнит двигался по пути найденному? Напомни мне, в каком виде там создается путь. Если в виде обічного пути - path_start(), если набором точек, то просто создавай новый путь и добавляй на него точки из того что дает скрипт.
Quote (cosferaps) И ещё, по поводу v_solid: такой переменной нет в fn_astar, она случаем не становится аргументом? Вообще что означают переменные в скобках, точнее, зачем их туда писать? v_status = fn_astar(d_map,d_cursor,d_path,v_heur,v_stupid,v_solid,v_limit) Все переменные, если они используются не в локальном куске кода должны быть обьявлены в криэйт или в скрипте, обьявленном в криэйт. Ты не туда смотришь. Переменные в скобках означают только то, что должны означать - это аргументы функции. А писать их нужно затем, что без всех необходимых данных, аргументов функции (а они хранятся как раз в переменных), она не выполнится.
|
|
| |
cosferaps | Дата: Вторник, 17 Апреля 2012, 22:32 | Сообщение # 11 |
почетный гость
Сейчас нет на сайте
| kashey, значит, для пути path_start(path) А как мне задать кол-во шагов, т.е. указать где его? А по поводу аргументов v_solid это argument5 ?
GMS MC
Сообщение отредактировал cosferaps - Вторник, 17 Апреля 2012, 22:39 |
|
| |
kashey | Дата: Среда, 18 Апреля 2012, 13:13 | Сообщение # 12 |
постоянный участник
Сейчас нет на сайте
| Quote (cosferaps) А как мне задать кол-во шагов, т.е. указать где его? Покопайся в скрипте, там все должно быть. Сейчас нет времени ковыряться, да и сложного там ничего нет. Просто читай код и пытайся понять что где. Только читать нужно вдумчиво а не просто глазами пробежаться.
|
|
| |
cosferaps | Дата: Среда, 18 Апреля 2012, 20:49 | Сообщение # 13 |
почетный гость
Сейчас нет на сайте
| kashey, это я понял, спасибо, а насчёт v_solid я правильно сказал или как?
GMS MC
|
|
| |
kashey | Дата: Четверг, 19 Апреля 2012, 14:57 | Сообщение # 14 |
постоянный участник
Сейчас нет на сайте
| Quote (cosferaps) kashey, это я понял, спасибо, а насчёт v_solid я правильно сказал или как? Я уже ответил на этот вопрос ранее: Quote (kashey) Переменные в скобках означают только то, что должны означать - это аргументы функции. А писать их нужно затем, что без всех необходимых данных, аргументов функции (а они хранятся как раз в переменных), она не выполнится.
|
|
| |
cosferaps | Дата: Четверг, 19 Апреля 2012, 22:12 | Сообщение # 15 |
почетный гость
Сейчас нет на сайте
| kashey, странно, если это аргументы, тогда такой вопрос. В скрипте всего 3 аргумента, а указанных переменных 7, + ни одна из них там же не встречается. Я что-то не допонимаю тогда, куда они передаются) ???
GMS MC
|
|
| |
kashey | Дата: Четверг, 19 Апреля 2012, 22:50 | Сообщение # 16 |
постоянный участник
Сейчас нет на сайте
| function(argument0,argument1,argument2,...,argumentN) В справке по скриптам все написано.
Quote (cosferaps) В скрипте всего 3 аргумента Я насчитал в функции 7 аргументов, ты очень невнимательно читаешь код. Строка 43 - седьмой аргумент, остальные выше. Quote (cosferaps) ни одна из них там же не встречается Они встречаются в вызове функции fn_astar(d_map,d_cursor,d_path,v_heur,v_stupid,v_solid,v_limit)Добавлено (19.04.2012, 22:50) --------------------------------------------- Чтобы тебе было понятнее: fn_astar(d_map,d_cursor,d_path,v_heur,v_stupid,v_solid,v_limit) оно же: fn_astar(argument0,argument1,argument2,argument3,argument4,argument5,argument6)
|
|
| |
cosferaps | Дата: Пятница, 20 Апреля 2012, 00:10 | Сообщение # 17 |
почетный гость
Сейчас нет на сайте
| kashey, вот, спасибо, я этого ждал ответа, а то не понимал . Спасибо ,kashey. Надеюсь, что сравлюсь с этим скриптом
GMS MC
|
|
| |
|