|
02.09.2011, 12:03
|
#1
|
Разработчик
Регистрация: 10.10.2008
Сообщений: 501
Написано 258 полезных сообщений (для 670 пользователей)
|
Команда After в Type
Что-то запутался.
Мне нужно мерить дистанцию между ентити в типе
ентити много и нужно чтобы каждый проверял нет ли рядом другого ентити.
Вот что я наделал .
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
|
(Offline)
|
|
02.09.2011, 12:29
|
#2
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Команда 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.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо St_AnGer за это полезное сообщение:
|
|
05.04.2012, 20:14
|
#3
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Команда After в Type
я тоже так писал, но когда много объектов настряпаешь, начинает тормозить (
__________________
|
(Offline)
|
|
05.04.2012, 20:56
|
#4
|
Бывалый
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений (для 1,133 пользователей)
|
Ответ: Команда 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
|
(Offline)
|
|
11.04.2012, 10:06
|
#5
|
ПроЭктировщик
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений (для 25 пользователей)
|
Ответ: Команда After в Type
Если у тебя лаги изза гиганстского количества ентитей, то дели мир на области и проверяй по какойнить хитрой схеме
|
(Offline)
|
|
11.04.2012, 12:20
|
#6
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Команда After в Type
Что приводит к дополнительному обращению в цикл
Но да, если на дистацию все объекты проверять, и обробатывать нужные, думаю будет пошустрее работать
__________________
|
(Offline)
|
|
11.04.2012, 13:26
|
#7
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Команда After в Type
Если написать свой "список", через набор функций, то можно создавать несколько списков одного типа. Затем делим карту на сектора. В каждом секторе есть указатель на соседние сектора, и список объектов. Пробегать можно только по списку объектов сектора, на котором игрок.
В блитце такое не получится, нужны классы, чтобы хранить в списке базовые классы.
Пишу затем что может такой ход мыслей подскажет кому-то решение.
|
(Offline)
|
|
11.04.2012, 14:02
|
#8
|
Нуждающийся
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений (для 83 пользователей)
|
Ответ: Команда After в Type
Сообщение от Жека
В блитце такое не получится, нужны классы, чтобы хранить в списке базовые классы.
|
Ась? Все получится, другое дело какой ценой
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.04.2012, 17:57
|
#9
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Команда After в Type
А нахрена вам в цикле расстояния проверять ?
Трудно даже представить задачу где это необходимо.
Выноси проверку в функцию и выполняй ТОЛЬКО когда это нужно.
Например у вас 100500 аптечек на уровне. Проверяйте расстояние по условию движения и таймеру на 0.5 сек
у вас пицот ботов воюющих друг с другом. Проверка только при поиске цели, один раз, потом цель в переменную бота и следущий поиск только при гибели цели.
и тд.
зы. большинство тормозов у новичков от непродуманной неоптимизированной логики, не от недостатков движка.
У меня НИКОГДА не было тормозов из-за логики, 98% времени цикла в правильном коде занимает рендер.
__________________
|
(Offline)
|
|
Эти 6 пользователя(ей) сказали Спасибо tormoz за это полезное сообщение:
|
|
11.04.2012, 18:35
|
#10
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Команда After в Type
В блице Type имеет список в себе. Для нормальной работы, нужно делать свои списки, и разделять их на сектора в пространстве. Например один квадратный км содержит один список, другой кв. км. другой список.
Это называется кластеризация.
Также прежде чем делать сложные логические операции между двумя объектами, убедись что они рядом сравнивая элементарно пересечение AABB (почитай в интернете).
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:51.
|