|
3D-программирование Вопросы, касающиеся программирования 3D мира |
29.01.2013, 23:56
|
#31
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Искуственный интеллект
Конкретного ответа нет
пойду гуглить дальше
|
(Offline)
|
|
30.01.2013, 07:33
|
#32
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Искуственный интеллект
Сообщение от burovalex
Ну даже, чтобы пользоваться Астаром, надо научиться пользоваться подтипами.
Type npc
Field entity
Field target
Field wp.waypoints
End Type
Type waypoints
Field x#,y#,z#
End Type
Function CreateNPC()
npc.npc=New npc
End Function
Function NewTarget()
For npc.npc.wp=Each npc.waipoints
;а здесь чтото не правильно, я хотел пройтись по типу waypoints в типе npc
Next
End Function
С чем у меня пока проблемы, вкурить не могу..
|
Блин, ну подскажите как пройтись по типу waipoints в типе npc
__________________
|
(Offline)
|
|
30.01.2013, 11:04
|
#33
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Искуственный интеллект
Чет я не понял, с трудом разобрался, так что получается.
Если в типе добавить еще один тип - то у них всё равно связи не будет?? 0_о
Получается в любом случае придётся проходить по всему списку и делать выборку?
__________________
|
(Offline)
|
|
30.01.2013, 12:07
|
#34
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
Ответ: Искуственный интеллект
Сообщение от burovalex
Чет я не понял, с трудом разобрался, так что получается.
Если в типе добавить еще один тип - то у них всё равно связи не будет?? 0_о
Получается в любом случае придётся проходить по всему списку и делать выборку?
|
Может ты все-таки в справку заглянешь? В блиц-бейсике для структурных типов Type создается один глобальный список, поэтому обьявляя там поле с таким типом, ты будешь иметь лишь указатель (ссылка) на экземпляр, а все создаваемые оператором New экземпляры будут автоматически помещаться в этот глобальный список. Поэтому надо делать свой список, т.е. в твоем случае тип Waypoints должен иметь ссылку на следующий в списке, а тип npc иметь ссылку на начало списка. Гугли односвязный и\или двусвязный список чтобы понять как его строить. По сути список - та же очередь в действительности, где каждый элемент помнит того кто впереди него ( за кем занял ), и того кто позади ( кто за ним занял ). К слову в BlitzMax, который уже ближе к "взрослым" ЯП, есть такой механизм. По-моему тебе стоит бросить блиц-бейсик и юзать блиц-макс, к тому-же, раз ты юзаешь Xors3D, юзать его из BlitzMax будет правильно, все-таки блиц-бейсик намертво связан с блиц3д, и юзать один движок из другого - извращение, имхо.
ЗЫ
вот примерно как можно очередь сделать
; элемент очереди
Type Element
; сзади по очереди
Field BackElement.Element
; впереди по очереди
Field FrontElement.Element
End Type
; очередь
Type Queue
; первый в очереди
Field FirstElement.Element
; последний в очереди
Field LastElement.Element
End Type
;
; функция входа в очередь
;
Function EnterQueue ( Queue.Queue, Element.Element )
;
; спрашиваешь кто последний
;
If Queue\LastElement <> Null Then
;
; последний запоминает что ты за ним занял
;
Queue\LastElement\BackElement = Element
;
; раз ты последний, за тобой никого нет
;
Element\BackElement = Null
;
; запоминаешь того, кто перед тобой
;
Element\FrontElement = Queue\LastElement
;
; последнего нет - нет и очереди
;
Else
;
; раз очереди нет, ты первый в очереди
;
Queue\FirstElement = Element
End If
;
; занял очередь, теперь ты последний в очереди
;
Queue\LastElement = Element
End Function
;
; функция выхода из очереди
;
Function LeaveQueue ( Queue.Queue, Element.Element )
;
; сзади тебя кто-то есть, ты не последний в очереди
;
If Element\BackElement <> Null Then
;
; сообщаешь тому, кто занимал за тобой, что он теперь стоит
; за тем, кто впереди нас
;
Element\BackElement\FrontElement = Element\FrontElement
;
; сзади тебя никого нет, ты последний в очереди
;
Else
;
; сообщаешь тому, кто впереди нас, что он становится последним
; в очереди
;
Queue\LastElement = Element\FrontElement
End If
;
; впереди тебя кто-то есть, ты не первый в очереди
;
If Element\FrontElement <> Null Then
;
; сообщаешь тому, за кем ты занимал,
; что за ним теперь не ты, а тот, кто занимал за тобой
;
Element\FrontElement\BackElement = Element\BackElement
;
; впереди тебя никого нет, ты первый в очереди
;
Else
;
; сообщаешь тому, кто сзади тебя, что он теперь первый в очереди
;
Queue\FirstElement = Element\BackElement
End If
End Function
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
30.01.2013, 16:24
|
#35
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Искуственный интеллект
щас, я сначала пиками поизвращаюсь )), не попрёт - буду юзать связанные списки. Всё равно спасибо, взял на заметку )
А блитц я не брошу пока не закончу с проектом. Переделывать муторно, т.к. моя версия пока стабильна, не буду пока ее трогать.
З.Ы. Как говорит мой батя, "НЕ ТРОГАЙ НАЛАЖЕННО РАБОТАЮЩИЙ МЕХАНИЗМ" - блин, правда правд )
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:25.
|