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

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

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

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

Ответ
 
Опции темы
Старый 08.05.2011, 01:18   #1
metalpasha
AnyKey`щик
 
Регистрация: 10.02.2008
Сообщений: 13
Написано 0 полезных сообщений
(для 0 пользователей)
Смущение Объект и его связь

Подскажите
Мне нужно для каждого типа свой список
К примеру
Type Zone
Filed En,Link_list
Field link.cCube
End type

Type cCube
Field En
End type

Тип Zone предположим в его зоне находится
Несколько типов cCube

Я конечно могу добавит только одну ссылку а мне нужно список
z\ link.cCube= указатель

можно конечно помечать в типе cCube что он принадлежит типу Zone
и потом проходи все список но это не подходит
(Offline)
 
Ответить с цитированием
Старый 08.05.2011, 01:43   #2
metalpasha
AnyKey`щик
 
Регистрация: 10.02.2008
Сообщений: 13
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Объект и его связь

вообще для каждой Зоны нужен список объектов находящих в ней
(Offline)
 
Ответить с цитированием
Старый 08.05.2011, 17:31   #3
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Объект и его связь

насколько я помню массивы в типе обозначаются с квадратными скобками !!
Type Zone
***
Field link.cCube[10]
***
End type
(Offline)
 
Ответить с цитированием
Старый 11.05.2011, 23:17   #4
Reks888
Дэвелопер
 
Аватар для Reks888
 
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений
(для 1,985 пользователей)
Ответ: Объект и его связь

link.cCube
Это по идее значит что мы из типа link берем переменную cCube и помещаем в Zone
В данном контексте красивее смотрится
Field link:cCube[10]
Тогда будет 10 объектов типа cCube в Zone
Или я неправильно понял что тебе нужно?
__________________
>type C:\MyProj\*
www.sypiac.weebly.com
>
(Offline)
 
Ответить с цитированием
Старый 12.05.2011, 02:18   #5
Venom2
 
Сообщений: n/a
Ответ: Объект и его связь

metalpasha
Локальных список в блице нет, но можно сделать вручную, например:
Type TNode
	Field Entity%
	Field PrevNode.TNode; ссылка на предыдущий объект в списке
	Field NextNode.TNode; ссылка на следующий объект в списке
End Type

Type TZone
	Field HeadNode.TNode; ссылка на первый объект в списке
	Field TailNode.TNode; ссылка на последний объект в списке
End Type

; добавляет объект в конец списка Zone
Function Zone_AddNode.TNode(Zone.TZone, Node.TNode)
	Node\NextNode = Null
	Node\PrevNode = Zone\TailNode
	If Zone\TailNode <> Null Then
		Zone\TailNode\NextNode = Node
	Else
		Zone\HeadNode = Node
	End If
	Zone\TailNode = Node
	Return Node
End Function

; убирает объект из списка Zone
Function Zone_RemoveNode(Zone.TZone, Node.TNode)
	If Node\PrevNode <> Null Then
		Node\PrevNode\NextNode = Node\NextNode
	Else
		Zone\HeadNode = Node\NextNode
	EndIf
	If Node\NextNode <> Null Then
		Node\NextNode\PrevNode = Node\PrevNode
	Else
		Zone\TailNode = Node\PrevNode
	EndIf
End Function

; создаем зону
Local Zone.TZone = New TZone

; добавляем 4 объекта
Local Node1.TNode = Zone_AddNode(Zone, New TNode)
Node1\Entity = 1
Local Node2.TNode = Zone_AddNode(Zone, New TNode)
Node2\Entity = 2
Local Node3.TNode = Zone_AddNode(Zone, New TNode)
Node3\Entity = 3
Local Node4.TNode = Zone_AddNode(Zone, New TNode)
Node4\Entity = 4

; убираем второй объект
Zone_RemoveNode(Zone, Node2)

; выводим список
Local Node.TNode = Zone\HeadNode
While Node <> Null
	Print(Str(Node\Entity))
	Node = Node\NextNode
Wend

WaitKey()
End
или, если ты заранее знаешь максимальное кол-во объектов в таком списке, используй как уже предлагали массив, например:
Type TNode
	Field Entity%
	Field Slot%; номер ячейки в массиве
End Type

Type TZone
	Field Size%; кол-во объектов в массиве
	Field List.TNode[10]; массив объектов, макс. 10 штук
End Type

; добавляет объект в массив Zone
Function Zone_AddNode.TNode(Zone.TZone, Node.TNode)
	Zone\List[Zone\Size] = Node
	Node\Slot = Zone\Size
	Zone\Size = Zone\Size + 1
	Return Node
End Function

; убирает объект из массива Zone
Function Zone_RemoveNode(Zone.TZone, Node.TNode)
	Zone\Size = Zone\Size - 1
	Zone\List[Node\Slot] = Zone\List[Zone\Size]
End Function

; создаем зону
Local Zone.TZone = New TZone

; добавляем 4 объекта
Local Node1.TNode = Zone_AddNode(Zone, New TNode)
Node1\Entity = 1
Local Node2.TNode = Zone_AddNode(Zone, New TNode)
Node2\Entity = 2
Local Node3.TNode = Zone_AddNode(Zone, New TNode)
Node3\Entity = 3
Local Node4.TNode = Zone_AddNode(Zone, New TNode)
Node4\Entity = 4

; убираем второй объект
Zone_RemoveNode(Zone, Node2)

; выводим массив
Local Slot%
For Slot = 0 To Zone\Size - 1
	Local Node.TNode = Zone\List[Slot]
	Print(Str(Node\Entity))
Next

WaitKey()
End
 
Ответить с цитированием
Старый 12.05.2011, 12:35   #6
metalpasha
AnyKey`щик
 
Регистрация: 10.02.2008
Сообщений: 13
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Объект и его связь

спасибо!!!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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