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

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

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

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 03.01.2013, 23:29   #1
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Удаление типа и ссылок на него.

Возьмем простой пример коровы и их пища трава. Трава растет кустами. Куст создается типом Grass. Удалить ее не сложно, корова рядом? тогда Delete grs.Grass. Но дело в том, что у меня для каждой коровы, из большого числа кустов, набираются в личный массив самые близкие кусты(записывается Энтити). Я удаляю ссылку на энтити для одной коровы которая подошла первая, как можно удалить и другие ссылки? Пытался проверять на Null или "0" тех коров которые не нашли куст но его уже съела другая. Если делать Хендлами то вроде проблемы не будет, но код переписывать не охото. Мож есть какие способы понять удален ли энтитя? Прошу прощения за коровы и кусты если они вам показались глупым примером
(Offline)
 
Ответить с цитированием
Старый 03.01.2013, 23:32   #2
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Удаление типа и ссылок на него.

Мож есть какие способы понять удален ли энтитя?
Nein. Только Handle-Object, только жёсткое ядро.
(Offline)
 
Ответить с цитированием
Старый 03.01.2013, 23:37   #3
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Удаление типа и ссылок на него.

Ну ведь блитз как то понимает что энтитя не найдена, и сообщает мемори ацесс... а если у него перехватить возможность? И часть кода перепрыгнуть где энтитя используется и удалить ссыль на которой споткнулся. Так нельзя не?)
(Offline)
 
Ответить с цитированием
Старый 03.01.2013, 23:44   #4
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Удаление типа и ссылок на него.

А что за проблема проверить во всех возможных местах, и если хендл совпадает, удалить ?
(Offline)
 
Ответить с цитированием
Старый 03.01.2013, 23:46   #5
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Удаление типа и ссылок на него.

tormoz,ну))) я так понимаю ты хочеш сказать следующее: пробежатся по циклу из 999 кустов у каждой из 300 коров. Причем при почти каждом проходе основного кода, не жирно ли?))
(Offline)
 
Ответить с цитированием
Старый 04.01.2013, 00:05   #6
Черный крыс
 
Сообщений: n/a
Ответ: Удаление типа и ссылок на него.

разбей поле на сектора и пробегайся по нужным тебе секторам.
 
Ответить с цитированием
Старый 04.01.2013, 00:21   #7
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Удаление типа и ссылок на него.

Diablo1909, я вродеб хотел так сделать, но здесь у меня нет опыта в построении подобных структур, не хочется делать ряд секторов просто по цифре. Хочется сделать, по присутствии в одном из них хотябы одного животного, генерацию новых прилегающих секций. А значит заморачиваться с тем как определить с какой стороны от данной секции есть еще секции а с какой нет. Проще уж хендлами.
(Offline)
 
Ответить с цитированием
Старый 04.01.2013, 01:00   #8
Черный крыс
 
Сообщений: n/a
Ответ: Удаление типа и ссылок на него.

Сделать двухмерный массив списков, в которых хранятся травинки. Список - это и есть сектор. А двумерный массив - это дробление поля. А описпанная тобой проблема легко решается проверкой на "вылет" за пределы массива. И все, больше это дело не трогается.

Обновляем только коров, по их координатам XZ очень быстро определяем в каком секторе (списке) она находится, и обходим этот список, можно еще обойти соседние для верности.

Другое дело, что в Блиц3Д - это реализуется черезжоперно.
В БлицМаксе это делается легко и элегантно за 3 минуты.
 
Ответить с цитированием
Старый 04.01.2013, 01:24   #9
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Удаление типа и ссылок на него.

Diablo1909, не совсем понял. Если мы посмотрим конкретно сектор (0,0) он будет иметь свой центр с координатами?
(Offline)
 
Ответить с цитированием
Старый 04.01.2013, 01:39   #10
Черный крыс
 
Сообщений: n/a
Ответ: Удаление типа и ссылок на него.

да.

Для начала определяем размер сектора

Const SIZE% = 100
После всех инициализаций, определяем в каком секторе стоит корова :

Local cow_x% = Int(EntityX(cow), True)
Local cow_y% = Int(EntityY(cow), True)

'Пореводим координаты коровы в координаты сектора

Local sector_x% = Int(cow_x / SIZE)
Local sector_y% = Int(cow_y / SIZE)

'Сектор, где стоит корова

Local sector:TList = array[sector_x, sector_y]
У сектора (0,0) координаты будут такими же, это просто квадрат [0, 0, SIZE, SIZE]
 
Ответить с цитированием
Старый 04.01.2013, 01:41   #11
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Удаление типа и ссылок на него.

Запоминать каждому кусту его корову, и кусты уже отданные одной корове не давать остальным. Простейшее решение.
Или создать отдельный тип-посредник, тип посредник знает где его куст, и знает жив ли куст. Коровы запоминают тип-посредника, который знает куст.
Когда куст съеден корова говорит посреднику что куста больше нет. Посредник запоминает это и удаляет траву. Корова забывает посредника, но не удаляет его.
Другая корова помнящая этого же посредника спрашивает у него куст, а посредник рапортует что куста больше нет, - корова непытается есть этот куст и просто забывает посредника.

В конце когда игра закончена или закончен уровень удаляем всех посредников через Delete Each Type

Примерно так.

Еще можно у посредника сделать список коров которые его знают, тогда когда любая корова съела куст то посредник сообщает всем коровам что куста нет, и после дохнет сам.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
CRASHER (04.01.2013)
Старый 04.01.2013, 01:51   #12
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Удаление типа и ссылок на него.

SBJoker, по поводу первого, наверно не то. А вот второй вариант с посредником интересный, скорее всего обычный пивот подойдет на эту роль) Пасыб!)
(Offline)
 
Ответить с цитированием
Старый 04.01.2013, 01:57   #13
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Удаление типа и ссылок на него.

Diablo1909, я правильно понимаю, что сектроа с координатами (-1,0);
(-1,-1); (0,-1) не может быть? Я это и имел в виду что "не хочу привязывать к числу". Если уж делать то динамическую систему, ну уж очень у меня лежит ко всему подобному)
(Offline)
 
Ответить с цитированием
Старый 04.01.2013, 06:02   #14
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Удаление типа и ссылок на него.

Сообщение от CRASHER Посмотреть сообщение
tormoz,ну))) я так понимаю ты хочеш сказать следующее: пробежатся по циклу из 999 кустов у каждой из 300 коров. Причем при почти каждом проходе основного кода, не жирно ли?))
нет.
в переборе коровы когда она съела куст запускаешь функцию удаления экземпляра типа травы, передавая в функцию хендл для поиска в списке травы. Если "еда" занимает больше одного прохода, прогони еще и всех коров, если еще какая ест тот же куст - переведи в другое состояние и обнули переменную.
Твоя проблема в кривой реализации логики, а не в недостатках блитца.
(Offline)
 
Ответить с цитированием
Старый 04.01.2013, 08:25   #15
Черный крыс
 
Сообщений: n/a
Ответ: Удаление типа и ссылок на него.

2tormoz

Предже, чем сьесть куст - его надо еще найти... перебирать всю поляну?

Если куст находится в списке - значит он еще не сьеден. Как только корова начинает его есть - его сразу же необходимо удалять из списка, чтоб другая корова не смогла сьесть по сути уже жующийся куст. ( ну или флаг состояния менять )

2CRASHER

Правильно. Но можно и обойти это ограничение, путем сдвига координат.
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
CRASHER (05.01.2013)
Ответ


Опции темы

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

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


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


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