![]() |
Удаление типа и ссылок на него.
Возьмем простой пример коровы и их пища трава. Трава растет кустами. Куст создается типом Grass. Удалить ее не сложно, корова рядом? тогда Delete grs.Grass. Но дело в том, что у меня для каждой коровы, из большого числа кустов, набираются в личный массив самые близкие кусты(записывается Энтити). Я удаляю ссылку на энтити для одной коровы которая подошла первая, как можно удалить и другие ссылки? Пытался проверять на Null или "0" тех коров которые не нашли куст но его уже съела другая. Если делать Хендлами то вроде проблемы не будет, но код переписывать не охото. Мож есть какие способы понять удален ли энтитя? Прошу прощения за коровы и кусты если они вам показались глупым примером :)
|
Ответ: Удаление типа и ссылок на него.
Цитата:
|
Ответ: Удаление типа и ссылок на него.
Ну ведь блитз как то понимает что энтитя не найдена, и сообщает мемори ацесс... а если у него перехватить возможность? И часть кода перепрыгнуть где энтитя используется и удалить ссыль на которой споткнулся. Так нельзя не?)
|
Ответ: Удаление типа и ссылок на него.
А что за проблема проверить во всех возможных местах, и если хендл совпадает, удалить ?
|
Ответ: Удаление типа и ссылок на него.
tormoz,ну))) я так понимаю ты хочеш сказать следующее: пробежатся по циклу из 999 кустов у каждой из 300 коров. Причем при почти каждом проходе основного кода, не жирно ли?))
|
Ответ: Удаление типа и ссылок на него.
разбей поле на сектора и пробегайся по нужным тебе секторам.
|
Ответ: Удаление типа и ссылок на него.
Diablo1909, я вродеб хотел так сделать, но здесь у меня нет опыта в построении подобных структур, не хочется делать ряд секторов просто по цифре. Хочется сделать, по присутствии в одном из них хотябы одного животного, генерацию новых прилегающих секций. А значит заморачиваться с тем как определить с какой стороны от данной секции есть еще секции а с какой нет. Проще уж хендлами.
|
Ответ: Удаление типа и ссылок на него.
Сделать двухмерный массив списков, в которых хранятся травинки. Список - это и есть сектор. А двумерный массив - это дробление поля. А описпанная тобой проблема легко решается проверкой на "вылет" за пределы массива. И все, больше это дело не трогается.
Обновляем только коров, по их координатам XZ очень быстро определяем в каком секторе (списке) она находится, и обходим этот список, можно еще обойти соседние для верности. Другое дело, что в Блиц3Д - это реализуется черезжоперно. В БлицМаксе это делается легко и элегантно за 3 минуты. |
Ответ: Удаление типа и ссылок на него.
Diablo1909, не совсем понял. Если мы посмотрим конкретно сектор (0,0) он будет иметь свой центр с координатами?
|
Ответ: Удаление типа и ссылок на него.
да.
Для начала определяем размер сектора Код:
Const SIZE% = 100 Код:
Local cow_x% = Int(EntityX(cow), True) |
Ответ: Удаление типа и ссылок на него.
Запоминать каждому кусту его корову, и кусты уже отданные одной корове не давать остальным. Простейшее решение.
Или создать отдельный тип-посредник, тип посредник знает где его куст, и знает жив ли куст. Коровы запоминают тип-посредника, который знает куст. Когда куст съеден корова говорит посреднику что куста больше нет. Посредник запоминает это и удаляет траву. Корова забывает посредника, но не удаляет его. Другая корова помнящая этого же посредника спрашивает у него куст, а посредник рапортует что куста больше нет, - корова непытается есть этот куст и просто забывает посредника. В конце когда игра закончена или закончен уровень удаляем всех посредников через Delete Each Type Примерно так. Еще можно у посредника сделать список коров которые его знают, тогда когда любая корова съела куст то посредник сообщает всем коровам что куста нет, и после дохнет сам. |
Ответ: Удаление типа и ссылок на него.
SBJoker, по поводу первого, наверно не то. А вот второй вариант с посредником интересный, скорее всего обычный пивот подойдет на эту роль) Пасыб!)
|
Ответ: Удаление типа и ссылок на него.
Diablo1909, я правильно понимаю, что сектроа с координатами (-1,0);
(-1,-1); (0,-1) не может быть? Я это и имел в виду что "не хочу привязывать к числу". Если уж делать то динамическую систему, ну уж очень у меня лежит ко всему подобному) |
Ответ: Удаление типа и ссылок на него.
Цитата:
в переборе коровы когда она съела куст запускаешь функцию удаления экземпляра типа травы, передавая в функцию хендл для поиска в списке травы. Если "еда" занимает больше одного прохода, прогони еще и всех коров, если еще какая ест тот же куст - переведи в другое состояние и обнули переменную. Твоя проблема в кривой реализации логики, а не в недостатках блитца. |
Ответ: Удаление типа и ссылок на него.
2tormoz
Предже, чем сьесть куст - его надо еще найти... перебирать всю поляну? Если куст находится в списке - значит он еще не сьеден. Как только корова начинает его есть - его сразу же необходимо удалять из списка, чтоб другая корова не смогла сьесть по сути уже жующийся куст. ( ну или флаг состояния менять ) 2CRASHER Правильно. Но можно и обойти это ограничение, путем сдвига координат. |
Часовой пояс GMT +4, время: 18:34. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot