forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Объект и его связь (http://forum.boolean.name/showthread.php?t=14683)

metalpasha 08.05.2011 01:18

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

Type cCube
Field En
End type

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

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

можно конечно помечать в типе cCube что он принадлежит типу Zone
и потом проходи все список но это не подходит

metalpasha 08.05.2011 01:43

Ответ: Объект и его связь
 
вообще для каждой Зоны нужен список объектов находящих в ней

IGR 08.05.2011 17:31

Ответ: Объект и его связь
 
насколько я помню массивы в типе обозначаются с квадратными скобками !!
Type Zone
***
Field link.cCube[10]
***
End type

Reks888 11.05.2011 23:17

Ответ: Объект и его связь
 
Цитата:

link.cCube
Это по идее значит что мы из типа link берем переменную cCube и помещаем в Zone
В данном контексте красивее смотрится
Field link:cCube[10]
Тогда будет 10 объектов типа cCube в Zone
Или я неправильно понял что тебе нужно?

Venom2 12.05.2011 02:18

Ответ: Объект и его связь
 
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


metalpasha 12.05.2011 12:35

Ответ: Объект и его связь
 
спасибо!!!


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot