Среда, 18 Декабря 2024, 13:55

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите разобраться с кодом
cosferapsДата: Вторник, 10 Апреля 2012, 13:04 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Всем привет smile ! Я создаю пошаговую стратегию и долго искал хороший пример гексогональной сетки, нашёл happy . Там всё достаточно понятно, но не для меня. Помогите из знающих, сделать так, чтобы выбранный юнит двигался по сетке с учётом очков действия. Юнит в самом примере не осуществлён, в нём есть только поиск пути. Не понимание вызвало большое кол-во сеток и их взаимосвязанность, никак не разберусь wacko . Помогите, кто может, пожалуйста.
Вот сам пример: 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
почетный гость
Сейчас нет на сайте
Фишка в том, что не во всём нужно разбираться smile , а только в поиске пути. Там определяется начальная и конечная точка пути, путь. Нужно сделать так, чтобы начальная точка имела координаты юнита, а конечная, куда мышкой ткнёшь, просто не могу правильно выделить нужный фрагмент кода, чтобы новые сетки не создавались, чтобы всё происходило на созданных. Остальоное неважно и для меня более понятно, чем сам поиск.
Более точно могу сказать, что смотреть нужно самый первый скрипт smile


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, спасибо, конечно smile , но с этим я и сам разобрался. Проблема немножечко в другом, не знаю, как правильно сформулировать. Ладно, тогда для уточнения, еслия я для экземпляра объекта напишу в Step:
if (mouse_check_button_pressed(mb_left)) {script111()}
if (mouse_check_button_pressed(mb_right)){script222()}, где
в скриптах содержиться всё, что было в скобках, то все экземпляры будут двигаться по одной и той же сетке или же они для каждого экземпляра будут свои создаваться? Хотя, наверное, туповатый вопрос, но всё-таки. wacko

И ещё, не пойму, как делаются ячейки непроходимыми и можно ли объекты сделать вместо кода, а то как уровни то делать?


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. Все они инициализируются из события криэйт, а это значит что создаются они только раз, при создании обьекта контроллера. Уже хотя бы из этого можно сделать вывод, что никаких прочих датаструктур в процессе быть не должно. Далее можно перелопатить скрипт, как это сделал я и не найти там функций создания датаструктур, только их обработки. Вывод один - только если создавать множественные экземпляры обьекта контроллера можно получить это самое множество сеток. smile
Quote (cosferaps)
И ещё, не пойму, как делаются ячейки непроходимыми

Кажется для непроходимых ячеек предусмотрена специальная переменная. v_solid если я не ошибаюсь.
Quote (cosferaps)
объекты сделать вместо кода, а то как уровни то делать

Обьекты должны только записывать в датаструктуру нужные значения, то есть код непроходимости, например, направляй из обьекта стены через указатель в обьект контроллер. При таком раскладе можно завалить карту обьектами, которые практически не бдут влиять на производительность, потому как содержат только одно действие и миимум встроенных переменных.
cosferapsДата: Вторник, 10 Апреля 2012, 23:29 | Сообщение # 7
почетный гость
Сейчас нет на сайте
kashey, спасибо за разъяснения biggrin
А можно по подробнее вот с этим:
Quote
Обьекты должны только записывать в датаструктуру нужные значения, то есть код непроходимости, например, направляй из обьекта стены через указатель в обьект контроллер. При таком раскладе можно завалить карту обьектами, которые практически не бдут влиять на производительность, потому как содержат только одно действие и миимум встроенных переменных.


GMS MC
kasheyДата: Вторник, 10 Апреля 2012, 23:46 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Ну только псевдокод. Мне лень пока разбирать весь тот ворох кода.

Итак нужно сделать ячейку непроходимой. У нас есть контроллер с сеткой и обьект стена.
В криэйт стены пишем:
изменить_значение_сетки(контроллер.сетка_проходимости,ячейка_по_икс,ячейка_по_игрек,значение)
Все smile
Про функции работы с сетками можно прочесть в справке. Переменные ячеек сетки у тебя на координатах обьекта, нужно только определить на какой ячейке стоит обьект. Формула расчета координат в гексах должна быть где то в скрипте.

Мой тебе совет, бери пока вещи полегче. Для меня это сложно, хотя я уже и не совсем новичок, а тебе я так поимаю это вообще потемки. Лучше сперва пойми как работают датаструктуры, по какому принципу работает астар, ну и сопутствующие вещи. Только потом пожно будет пытаться вникнуть и использовать.
cosferapsДата: Воскресенье, 15 Апреля 2012, 22:11 | Сообщение # 9
почетный гость
Сейчас нет на сайте
kashey, спасибо, то, что ты объяснил, я прекрасно понял, а остальное мне и ни к чему, да и не понимаю ничего. Даже теже самые аргументы, зачем, что не понятно smile а приспособить под работу и сделать, как мне надо у меня более менее выходит smile .
Конечно, хорошо было бы со всем этим разобраться, но справку я не особо понимаю в этих местах, а на форумах редко что-то чёткое встречается, а не копипаст справочный. Всё, что мне кажется нужным и понятным, я, конечно, себе скидываю smile .

Добавлено (15.04.2012, 21:55)
---------------------------------------------
kashey, кажется, я кое-что забыл спросить smile . Как мне сделать, чтобы юнит двигался по пути найденному?

Добавлено (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) smile А как мне задать кол-во шагов, т.е. указать где его?
А по поводу аргументов 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, вот, спасибо, я этого ждал ответа, а то не понимал biggrin . Спасибо ,kashey. Надеюсь, что сравлюсь с этим скриптом smile

GMS MC
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг