Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 02.09.2011, 12:03   #1
mauNgerS
Разработчик
 
Аватар для mauNgerS
 
Регистрация: 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
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 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 за это полезное сообщение:
mauNgerS (02.09.2011), PackegerX (03.09.2011)
Старый 05.04.2012, 20:14   #3
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Команда After в Type

я тоже так писал, но когда много объектов настряпаешь, начинает тормозить (
__________________
(Offline)
 
Ответить с цитированием
Старый 05.04.2012, 20:56   #4
Wegox
Бывалый
 
Аватар для Wegox
 
Регистрация: 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
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Команда After в Type

Если у тебя лаги изза гиганстского количества ентитей, то дели мир на области и проверяй по какойнить хитрой схеме
(Offline)
 
Ответить с цитированием
Старый 11.04.2012, 12:20   #6
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Жека (12.04.2012)
Старый 11.04.2012, 17:57   #9
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Команда After в Type

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

зы. большинство тормозов у новичков от непродуманной неоптимизированной логики, не от недостатков движка.
У меня НИКОГДА не было тормозов из-за логики, 98% времени цикла в правильном коде занимает рендер.
__________________
(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо tormoz за это полезное сообщение:
Crayzi (11.04.2012), Hurrit (11.04.2012), mauNgerS (11.04.2012), moka (11.04.2012), SBJoker (11.04.2012), St_AnGer (11.04.2012)
Старый 11.04.2012, 18:35   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Команда After в Type

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com