Сбор ресурсов неписями
| |
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, а можешь ещё раз перезалить?
А то по твоей ссылке мне предлагают похудеть
|
|
| |
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, да. прости за твою же цитату, но "тупишь" вот тут есть более свежая версия - r2, доступная достаточно давно; указана дата 2012-02-05 качай на здоровье, и будет тебе щасцье!
- Доброе утро, Агент Пи!
|
|
| |
Tromlen | Дата: Понедельник, 22 Июля 2013, 12:53 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Мой косЯк, пардон. Запустилось. Спасибо за ответ. Но(!!!), у меня не заработало. Всё равно мой сборщик идёт не к ближайшему, а к первому в списке. Исходник покажу попозже, если не разберусь. Пока что вопрос объясните строки 10-12, там где описание функции, ибо слаба матчасть. Спасибо.
|
|
| |
Nick_Rimer | Дата: Понедельник, 22 Июля 2013, 14:43 | Сообщение # 10 |
заслуженный участник
Сейчас нет на сайте
| эпично.. харвестр, спайс.. а где шаи-хулуды?!
примерно объясняю, что происходит в строках 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 Думал же, что, что-то забыл
Любой дурак может написать программу, которую поймёт компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты.
|
|
| |
Nick_Rimer | Дата: Понедельник, 22 Июля 2013, 20:39 | Сообщение # 16 |
заслуженный участник
Сейчас нет на сайте
| Tromlen, ну.. вообще должна быть у каждого своя. я же, например, делал исходник с сундуком (недавно тема была) так, что сундуки можно было плодить, и шмотки там везде разные, и с каждым работать можно отдельно.. скорее всего надо сделать пару дополнительных проверок.. если пришлёшь свой исходник, я гляну. может даже и сейчас.
- Доброе утро, Агент Пи!
|
|
| |
Tromlen | Дата: Вторник, 23 Июля 2013, 07:37 | Сообщение # 17 |
был не раз
Сейчас нет на сайте
| Вот тоже самое, но с двумя сборщиками. Если понаблюдать, то приходишь к выводу, что приватная переменная одного свободно даёт указания другому. В итоге, один сборщик может ждать у базы, пока не подойдёт другой, или посреди пути развернуться и снова идти за грузом, или сдать груз, который принял другой сборщик.
|
|
| |
Nick_Rimer | Дата: Вторник, 23 Июля 2013, 09:46 | Сообщение # 18 |
заслуженный участник
Сейчас нет на сайте
| Tromlen, я поковырялся, немножко внёс исправления (отмечено красным) в общем-то работает, я посидел, посмотрел, харвестры сделали порядка 60-ти ходок, всё было окей. не факт, что где-нибудь не будет сбоя (они вообще иногда тупить начинают, особенно при столкновениях), но должно всё работать. очень на это надеюсь клац!
- Доброе утро, Агент Пи!
|
|
| |
_ToBe_ | Дата: Вторник, 23 Июля 2013, 10:08 | Сообщение # 19 |
постоянный участник
Сейчас нет на сайте
| Вот, если интересно - мой вариант сбора ресурсов
Моя игрулька :)
|
|
| |
Tromlen | Дата: Вторник, 23 Июля 2013, 10:18 | Сообщение # 20 |
был не раз
Сейчас нет на сайте
| Спасибо. Сейчас проверю.
И продолжение темы, Вопрос № 3 После сбора груза (Cargo=1), случается, что сборщик заезжает на соседний гриб, который стоит на пути к базе. Вроде бы ничего, но осадок остаётся. Попробовал решить проблему Cargo=1 ---> ... add path finding obstacle. Объезжать грибы, если сборщик загружен. Но команды для удаления add path... нет, и следующий гриб собрать будет уже нельзя. Есть идеи?
|
|
| |
|