![]() |
Удаление типа и ссылок на него.
Возьмем простой пример коровы и их пища трава. Трава растет кустами. Куст создается типом 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 Правильно. Но можно и обойти это ограничение, путем сдвига координат. |
Ответ: Удаление типа и ссылок на него.
Цитата:
Цитата:
Код:
;создаем обьект Код:
Type Mytype |
Ответ: Удаление типа и ссылок на него.
Цитата:
Правильно организованный код: в апдейте травы только трава, рост и тд. Лучше по таймеру. в апдейте коров - поиск травы, еда, удаление. Запуск функции удаления ТОЛЬКО по условию (не каждый цикл). перебирать траву в функции удаления не обязательно, экземпляр типа находить можно обжектхендлом, а вот перебрать коров придется, но тормозов не будет - функция вызывается по событию. |
Ответ: Удаление типа и ссылок на него.
Народ, я решил переделать на хендлы. При попытке коровы назначить ближайщий куст "аппетитным" происходит проверка хендла на Null. Дописал еще возможность 3 коровам одновременно кушать один куст.
RBK, об этом и еж в тумане осведомлен)) А вот трабла то с ссылкой. Прированяй элемент массива из типа "корова" к типу "трава", то есть... Тип корова филд вкусные кусты[99] енд тип вкусные кусты[i]=трава\Энтити удали трава\Энтити и проверь трава\Энтити и ссылку на него имеем трава\Энтити=0 кусты[i]=432579357 следственно только хендлы или через пивот, что наверно все таки сложнее чем хендл. |
Ответ: Удаление типа и ссылок на него.
Diablo1909, При сдвиге наверно нужно будет переназначать секторам где какая трава была. Тоесть в секторе (0,0) было 3 куста, в секторе (1,1) 2 куста. Смещаем, получается в новом (0,0) нет кустов, в (1,1) 3 куста, в (2,2) 2 куста. так?)
|
Ответ: Удаление типа и ссылок на него.
tormoz, а что ты имеешь в виду говоря "Лучше по таймеру" ?
Я сделал на апдейт коров ограничение, если превышен лимит времени, то выполняется Exit из For и записывается последний индекс, с которого в следующем глобальном проходе продолжается цикл. Ты не это хотел сказать? |
Ответ: Удаление типа и ссылок на него.
Цитата:
Код:
Type grass |
Ответ: Удаление типа и ссылок на него.
Цитата:
А сектора и прочие извраты тут не нужны- попытайся вкурить что я выше написал |
Ответ: Удаление типа и ссылок на него.
RBK, вопрос звучит как?) "Удаление типа и ссылки на него". В первом посте сказал что делал не через хендлы. Теперь уже переделал на хендлы, и да, проверить их на Null легко. Я думал что ссылку моно тоже как то... того... при ошибке(не выводя саму ошибку). А я элемент как у тебя my\eat[1] приравнивал к самому энтиту. Из за этого и еррор. Спасибо конечно)) За старание!)
|
Ответ: Удаление типа и ссылок на него.
CRASHER
Все кусты заносятся в сектора на стадии инициализации. И все смещения определяются заранее. Цитата:
|
Ответ: Удаление типа и ссылок на него.
Diablo1909, а ты знашыт меня на из врат толкаешь да?)
|
Ответ: Удаление типа и ссылок на него.
CRASHER
Я тебя толкаю бросить этот недо-язык, и пересесть хотя бы на BlitzMAX. Там такой метод не будет извратом. |
Ответ: Удаление типа и ссылок на него.
Diablo1909, не но ведь B3D для чего то же существует? Ведь есть же разница между ними, и что же в Бмаксе такого особенного чего нет в B3D? Хors с директом в B3D есть и вроде достатошно))
|
Ответ: Удаление типа и ссылок на него.
Запорожец тоже для чего то существовал... но сегодня на нем почти никто не ездит.
Все тонкости описаны здесь : http://g3d-program.narod.ru/stat/beginer_blitz.htm |
Ответ: Удаление типа и ссылок на него.
Diablo1909, мне кажется или на БМ мало кто сидит? Я какой пример ни качну с булки, все на B3D)))
|
Часовой пояс GMT +4, время: 03:05. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot