Суббота, 23 Ноября 2024, 01:26

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Сбор ресурсов неписями
TromlenДата: Понедельник, 16 Мая 2011, 07:33 | Сообщение # 1
был не раз
Сейчас нет на сайте
Аналогичную тему подымал на официальном форуме. Интересно, что ответят здесь.
Постановка задачи следующая: Непись бродит по карте и собирает рандомно возникающие объекты (System-Creat object)
Поначалу реализовывалось через действия для NPC RTS-Move to object...
Работает не совсем корректно, NPC "идёт" к первому возникшему объекту, а хотелось бы к ближайшему.
Удалось реализовать через комбинацию Турель+Мяч-RTS. Но хотелось бы попроще. Есть идеи?
allxumukДата: Понедельник, 16 Мая 2011, 11:06 | Сообщение # 2
старожил
Сейчас нет на сайте
Quote (Tromlen)
Аналогичную тему подымал на официальном форуме. Интересно, что ответят здесь.

А люди-то одни и теже сидят. Вот решение твоей проблемы, всё очень просто.


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
TromlenДата: Четверг, 18 Июля 2013, 12:22 | Сообщение # 3
был не раз
Сейчас нет на сайте
Самое оно. Спасибо.

Добавлено (18.07.2013, 12:22)
---------------------------------------------
Дико извиняюсь. Спустя годы вернулся к старому проекту, но опять возникла таже проблема.
allxumuk напомни, плиз.

_ToBe_Дата: Четверг, 18 Июля 2013, 12:28 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
allxumuk, а можешь ещё раз перезалить?

А то по твоей ссылке мне предлагают похудеть biggrin

TromlenДата: Четверг, 18 Июля 2013, 13:39 | Сообщение # 5
был не раз
Сейчас нет на сайте
Исходник утерян, ссылка мертва.

Сообщение отредактировал Tromlen - Пятница, 19 Июля 2013, 14:45
allxumukДата: Суббота, 20 Июля 2013, 18:10 | Сообщение # 6
старожил
Сейчас нет на сайте
Тот исходник к сожалению утерян, вот другой.

Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
TromlenДата: Понедельник, 22 Июля 2013, 07:40 | Сообщение # 7
был не раз
Сейчас нет на сайте
Исходник не открывается. Утверждает, что файл создан в более новой версии. У меня r.1.2 от 14.05.2011. Прости, если туплю, но позже вроде ничего не было.
Nick_RimerДата: Понедельник, 22 Июля 2013, 08:21 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Tromlen, да. прости за твою же цитату, но "тупишь" smile
вот тут есть более свежая версия - r2, доступная достаточно давно; указана дата 2012-02-05
качай на здоровье, и будет тебе щасцье! smile


- Доброе утро, Агент Пи!
TromlenДата: Понедельник, 22 Июля 2013, 12:53 | Сообщение # 9
был не раз
Сейчас нет на сайте
Мой косЯк, пардон.
Запустилось. Спасибо за ответ.
Но(!!!), у меня не заработало.
Всё равно мой сборщик идёт не к ближайшему, а к первому в списке.
Исходник покажу попозже, если не разберусь.
Пока что вопрос объясните строки 10-12, там где описание функции, ибо слаба матчасть.
Спасибо.
Nick_RimerДата: Понедельник, 22 Июля 2013, 14:43 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
эпично.. харвестр, спайс.. happy
а где шаи-хулуды?! crazy

примерно объясняю, что происходит в строках 10-12:
10 строка - событие "если вызвана функция harvest", естественно, выполняется по вызову функции.
11 строка - запускается цикл FOR, который от первого до последнего проверит все наши спрайты Spice, отсортирует их по формуле distance(Harvester.X, Harvester.Y, Spice.X, Spice.Y), т.е. вычисление расстояния между двумя точками - текущим положением харвестра и спрайта Spice, который сейчас проверяется, а так же всё это отсортируется по возрастанию (Ascending).
12 строка - loopindex (т.е. переменная цикла FOR; по идее должна быть в диапазоне от 1 до Spice.Count) сравнивается как раз с этим самым Spice.Count, если это так, то мы двигаемся к спрайту. Проверка нужна для того, чтобы начать движение после того, как будут проверены все спрайты Spice, а не после проверки каждого дёргаться..

я объяснил, что там указано, не проверял, должно ли это работать, и как оно работает.. может теперь тебе больше будет понятно, а мне вот пора дальше продолжать работать..

Добавлено (22.07.2013, 14:43)
---------------------------------------------
вообще, по идее результатом работы 11й строки должно стать то, что мы должны получить объект Spice, до которого расстояние - наименьшее.
и тогда в строке 12 поехать именно к нему..


- Доброе утро, Агент Пи!
TromlenДата: Понедельник, 22 Июля 2013, 14:59 | Сообщение # 11
был не раз
Сейчас нет на сайте
Выходит, я всё понял правильно. (Я надеюсь)
Посмотрите мой исходник (он не эпичен, без гериатрической пряности), но зато не работает.
Nick_RimerДата: Понедельник, 22 Июля 2013, 17:02 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
Tromlen, а вот попробуйте переставить в не вашем исходнике хаотично спайс. вообще наугад. 100500 раз перемешайте, чтобы не поставить примерно так, как он по ним ходит. и будет видно, что нихрена он не бегает к ближайшему, а бегает к хрен знает какому.. не всегда ближайшему. по крайней мере у меня так получилось, я особо и не старался. то к первому поехал, то аж к последнему.. и пересекал другие спайсовые поля, радостно харвестируя с них.
так что надо подумать над тем, как что-то изменить.. но это уже не сейчас. поехал я пока с работы домой.


- Доброе утро, Агент Пи!
xxxShadeДата: Понедельник, 22 Июля 2013, 18:35 | Сообщение # 13
почетный гость
Сейчас нет на сайте
Исправил исходник используя Pick closest
TromlenДата: Понедельник, 22 Июля 2013, 18:49 | Сообщение # 14
был не раз
Сейчас нет на сайте
О-о-о!! Это чудо.
Работает!!!
Всем спасибо за поддержку.

Теперь вопрос №2 из той же темы. Как размножить поганцев-собирателей так, чтобы работали корректно.
Я-то полагал, что переменная (Cargo) отвечающая за признак наполнил-разгрузил у каждого спрайта своя.
Но если создать ещё одного через кописпаст, то возникает ситуация, когда один сборщик принял груз, а второй его сдал.
Получается нужно делать копиклон, для каждого сборщика или я ошибаюсь?


Сообщение отредактировал Tromlen - Понедельник, 22 Июля 2013, 19:09
allxumukДата: Понедельник, 22 Июля 2013, 19:24 | Сообщение # 15
старожил
Сейчас нет на сайте
Цитата (xxxShade)
Pick closest

Думал же, что, что-то забыл biggrin


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
Nick_RimerДата: Понедельник, 22 Июля 2013, 20:39 | Сообщение # 16
заслуженный участник
Сейчас нет на сайте
Tromlen, ну.. вообще должна быть у каждого своя.
я же, например, делал исходник с сундуком (недавно тема была) так, что сундуки можно было плодить, и шмотки там везде разные, и с каждым работать можно отдельно..
скорее всего надо сделать пару дополнительных проверок..
если пришлёшь свой исходник, я гляну. может даже и сейчас.


- Доброе утро, Агент Пи!
TromlenДата: Вторник, 23 Июля 2013, 07:37 | Сообщение # 17
был не раз
Сейчас нет на сайте
Вот тоже самое, но с двумя сборщиками.
Если понаблюдать, то приходишь к выводу, что приватная переменная одного свободно даёт указания другому.
В итоге, один сборщик может ждать у базы, пока не подойдёт другой, или посреди пути развернуться и снова идти за грузом, или сдать груз, который принял другой сборщик.
Nick_RimerДата: Вторник, 23 Июля 2013, 09:46 | Сообщение # 18
заслуженный участник
Сейчас нет на сайте
Tromlen, я поковырялся, немножко внёс исправления (отмечено красным)
в общем-то работает, я посидел, посмотрел, харвестры сделали порядка 60-ти ходок, всё было окей.
не факт, что где-нибудь не будет сбоя (они вообще иногда тупить начинают, особенно при столкновениях), но должно всё работать. очень на это надеюсь smile
клац!


- Доброе утро, Агент Пи!
_ToBe_Дата: Вторник, 23 Июля 2013, 10:08 | Сообщение # 19
постоянный участник
Сейчас нет на сайте
Вот, если интересно - мой вариант сбора ресурсов smile

Моя игрулька :)
TromlenДата: Вторник, 23 Июля 2013, 10:18 | Сообщение # 20
был не раз
Сейчас нет на сайте
Спасибо. Сейчас проверю.

И продолжение темы, Вопрос № 3
После сбора груза (Cargo=1), случается, что сборщик заезжает на соседний гриб, который стоит на пути к базе.
Вроде бы ничего, но осадок остаётся.
Попробовал решить проблему Cargo=1 ---> ... add path finding obstacle.
Объезжать грибы, если сборщик загружен. Но команды для удаления add path... нет, и следующий гриб собрать будет уже нельзя.
Есть идеи?
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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