Уже многим становятся интересны эти команды, и не зря - они позволяют повысить скорость работы приложения в обработках типов, за счёт ухода от полного перебора ( см http://www.boolean.name/showpost.php...postcount=19 ). Рассмотрим работу с командами ещё раз - подробно.
HANDLE Когда вы работаете с типом вы используете что-то вроде указателя на данный элемент типа( сомнительный термин, применительно к Блитц): Код:
Type bot Что далеко не всегда удобно, и уж точно не универсально. Команда HANDLE позволяет получить от указателя, универсальное, характеризующее только один конкретный элемент число. Код:
x_ptr=Handle(ptr) OBJECT Теперь необходимо через хендл элемента типа получить доступ к полям элемента - получить указатель на элемент обратно. Выглядит это так указатель.имя_типа=Object.имя_типа(хендл_элемента) . Реализация: Код:
new_ptr.bot=Object.bot(x_ptr) С переменной, хранящей хендл элемента, можно работать как с обычным числом. Что очень удобно. Для закрепления рекомендую посмотреть конкретный пример - ссылка выше. |
Цитата:
Команда Handle не получает "указатель", а присваивает внутренний блитцевский глобальный индекс - номер экземпляра коллекции (сквозной для всех типов), который уже ссылается на двойной связанный список в исходнике Блитца в С++. Код:
Type a |
Причем Handle не просто возвращает значение, как функция - в примере переменная z получает это значение и может больше вообще нигде не использоваться, т.е. это вообще мусорная переменная. Происходит внутреннее связывание.
Код:
Type a |
Благодарю за замечания.
|
Ответ: Object-Handle
А как лучше выйти из ситуации, когда юнит(тип) не имеет постоянного Entity или имеет несколько, что меняется в процессе игры. Можно создать хайднутый пивот и назначить ему имя, но можно ли как-то без дополнительных Entity обойтись? Имя(ID) юнита известно, надо только его найти в списке.
|
Ответ: Object-Handle
хайднутый пивот не нужно, просто пивот на кот. назначь коллизию пикмоде и тд
а вот в имени этого пивота и будет порядковый номер элемента типа |
Ответ: Object-Handle
А если существует порядка сто-тысяча ботов в игре, при этом в уровне с игроком находится 5%, остальных можно обрабатывать математически, стоит ли создавать столько пивотов? Тогда надо писать отдельно постоянную параллельную обработку для оффлайн юнитов а по именам выбирать только тех кто в уровне?
|
Ответ: Object-Handle
Фигасе у тебя аппетиты.
Тогда заведи 2 типа: для невидимых юнитов и для видимых. Пивот ТОЛЬКО у видимых. И перекидывай их из одного типа в другой |
Ответ: Object-Handle
Blitz3D > FAQ
где модеры? |
Re: Object-Handle
Код:
Код:
ptr.bot=New bot |
Ответ: Object-Handle
это:
Цитата:
Цитата:
|
Ответ: Object-Handle
Как проверить существует ли объект, без перебора, потому что если попытатся получить доступ к какому либо значению удаленного объекта, то вылетает мемори аксесс волатион.
Код:
Type test ---------------------------------------------------------------- П.с. Под утро меня озарило, проверить будет ли МАВ если попробовать узнать хендл несуществующего объекта, МАВ не выдало, а хендл был равен нулю (нумерация в типах начинается с 1-ци, так что все ок). Вместо: Код:
new_ptr.test=Object.test(3) Код:
new_ptr.test=Object.test(3) |
Ответ: Object-Handle
new_ptr.test=Object.test(3)
If new_ptr<>Null |
Часовой пояс GMT +4, время: 14:43. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot