![]() |
Команда After в Type
Что-то запутался.
Мне нужно мерить дистанцию между ентити в типе ентити много и нужно чтобы каждый проверял нет ли рядом другого ентити. Вот что я наделал:dontknow: . Код:
For k.kot = Each kot |
Ответ: Команда After в Type
Этим ты проверишь расстояние только со следующим объектом k.
Так можно проверить расстояние до всех объектов (не люблю циклы в циклах, но по другому я не знаю как ещё можно это сделать): Код:
For k.kot = Each kot |
Ответ: Команда After в Type
я тоже так писал, но когда много объектов настряпаешь, начинает тормозить (
|
Ответ: Команда After в Type
А зачем дважды цикл
For k.kot = Each kot For k1.kot = Each kot If k<> Null and k\entity <> k1\entity If EntityDistance(k1\entity,k\entity)<2 k\speed=0 Else k\speed=1 EndIf EndIf next next Ну там как типо того локал k.kot =нев kot патом k\entity1=entity1 k\entity2=entity2 ну а потом For k.kot = Each kot next либо до основного цикла та где у тебя new For k1.kot = Each kot локал k.kot =нев kot k\entity1=entity1 k\entity2=k1\entity2 next |
Ответ: Команда After в Type
Если у тебя лаги изза гиганстского количества ентитей, то дели мир на области и проверяй по какойнить хитрой схеме :-D
|
Ответ: Команда After в Type
Что приводит к дополнительному обращению в цикл :-D
Но да, если на дистацию все объекты проверять, и обробатывать нужные, думаю будет пошустрее работать |
Ответ: Команда After в Type
Если написать свой "список", через набор функций, то можно создавать несколько списков одного типа. Затем делим карту на сектора. В каждом секторе есть указатель на соседние сектора, и список объектов. Пробегать можно только по списку объектов сектора, на котором игрок.
В блитце такое не получится, нужны классы, чтобы хранить в списке базовые классы. Пишу затем что может такой ход мыслей подскажет кому-то решение. |
Ответ: Команда After в Type
Цитата:
|
Ответ: Команда After в Type
А нахрена вам в цикле расстояния проверять ?
Трудно даже представить задачу где это необходимо. Выноси проверку в функцию и выполняй ТОЛЬКО когда это нужно. Например у вас 100500 аптечек на уровне. Проверяйте расстояние по условию движения и таймеру на 0.5 сек у вас пицот ботов воюющих друг с другом. Проверка только при поиске цели, один раз, потом цель в переменную бота и следущий поиск только при гибели цели. и тд. зы. большинство тормозов у новичков от непродуманной неоптимизированной логики, не от недостатков движка. У меня НИКОГДА не было тормозов из-за логики, 98% времени цикла в правильном коде занимает рендер. |
Ответ: Команда After в Type
В блице Type имеет список в себе. Для нормальной работы, нужно делать свои списки, и разделять их на сектора в пространстве. Например один квадратный км содержит один список, другой кв. км. другой список.
Это называется кластеризация. Также прежде чем делать сложные логические операции между двумя объектами, убедись что они рядом сравнивая элементарно пересечение AABB (почитай в интернете). |
Часовой пояс GMT +4, время: 16:16. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot