forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Команда After в Type (http://forum.boolean.name/showthread.php?t=15408)

mauNgerS 02.09.2011 12:03

Команда After в Type
 
Что-то запутался.
Мне нужно мерить дистанцию между ентити в типе
ентити много и нужно чтобы каждый проверял нет ли рядом другого ентити.

Вот что я наделал:dontknow: .

Код:

For k.kot = Each kot       
    a=k\entity
    k= After k
    If k<> Null
      If EntityDistance(a,k\entity)<2
          k\speed=0
      Else
          k\speed=1
      EndIf
    EndIf
next


St_AnGer 02.09.2011 12:29

Ответ: Команда After в Type
 
Этим ты проверишь расстояние только со следующим объектом k.

Так можно проверить расстояние до всех объектов (не люблю циклы в циклах, но по другому я не знаю как ещё можно это сделать):

Код:

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\entity <> k1\entity сделать условие k <> k1.

burovalex 05.04.2012 20:14

Ответ: Команда After в Type
 
я тоже так писал, но когда много объектов настряпаешь, начинает тормозить (

Wegox 05.04.2012 20:56

Ответ: Команда 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

Crayzi 11.04.2012 10:06

Ответ: Команда After в Type
 
Если у тебя лаги изза гиганстского количества ентитей, то дели мир на области и проверяй по какойнить хитрой схеме :-D

burovalex 11.04.2012 12:20

Ответ: Команда After в Type
 
Что приводит к дополнительному обращению в цикл :-D

Но да, если на дистацию все объекты проверять, и обробатывать нужные, думаю будет пошустрее работать

Жека 11.04.2012 13:26

Ответ: Команда After в Type
 
Если написать свой "список", через набор функций, то можно создавать несколько списков одного типа. Затем делим карту на сектора. В каждом секторе есть указатель на соседние сектора, и список объектов. Пробегать можно только по списку объектов сектора, на котором игрок.
В блитце такое не получится, нужны классы, чтобы хранить в списке базовые классы.
Пишу затем что может такой ход мыслей подскажет кому-то решение.

Платон Александрович 11.04.2012 14:02

Ответ: Команда After в Type
 
Цитата:

Сообщение от Жека (Сообщение 225113)
В блитце такое не получится, нужны классы, чтобы хранить в списке базовые классы.

Ась? Все получится, другое дело какой ценой :)

tormoz 11.04.2012 17:57

Ответ: Команда After в Type
 
А нахрена вам в цикле расстояния проверять ?
Трудно даже представить задачу где это необходимо.
Выноси проверку в функцию и выполняй ТОЛЬКО когда это нужно.
Например у вас 100500 аптечек на уровне. Проверяйте расстояние по условию движения и таймеру на 0.5 сек
у вас пицот ботов воюющих друг с другом. Проверка только при поиске цели, один раз, потом цель в переменную бота и следущий поиск только при гибели цели.
и тд.

зы. большинство тормозов у новичков от непродуманной неоптимизированной логики, не от недостатков движка.
У меня НИКОГДА не было тормозов из-за логики, 98% времени цикла в правильном коде занимает рендер.

moka 11.04.2012 18:35

Ответ: Команда After в Type
 
В блице Type имеет список в себе. Для нормальной работы, нужно делать свои списки, и разделять их на сектора в пространстве. Например один квадратный км содержит один список, другой кв. км. другой список.
Это называется кластеризация.
Также прежде чем делать сложные логические операции между двумя объектами, убедись что они рядом сравнивая элементарно пересечение AABB (почитай в интернете).


Часовой пояс GMT +4, время: 16:16.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot