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=8334)

karry 22.05.2009 12:34

Управление переименованными чайлдами
 
Допустим есть анимированный юнит, и кликнув на него я хочу чтобы высвечивалось имя юнита. Я сделал перебор чайлдов меша и каждому присвоил имя "Unit01".

Но в то же время хочется сохранить возможность управлять отдельными чайлдами, поскольку быстрее написать в блице FindChild-TurnEntity, чем переэкспортировать всю модель...а при загрузке модели все имена уже заменились на "Unit01"...и как совместить эти две функции, переименования и в то же время управления ?

Можно конечно выбирать юнит по сфере, а чайлдами управлять по изначальным именам, но меня интересует как сделать вариант с пополигонным пиком.

HolyDel 22.05.2009 12:50

Ответ: Управление переименованными чайлдами
 
задать составное имя:
Unit01:turret
Unit01:tits
Unit01:wheel0

например.

хотя лучше всего хранить в имени хендл на елемент типа юнита. и уже в типе хранить все что нужно.

karry 22.05.2009 13:16

Ответ: Управление переименованными чайлдами
 
Цитата:

хотя лучше всего хранить в имени хендл на елемент типа юнита. и уже в типе хранить все что нужно.
Элемент типа - это что имеется в виду ? Типы у меня в голове пока не очень укладываются.

MiXaeL 22.05.2009 13:19

Ответ: Управление переименованными чайлдами
 
Ну вот опять)

karry 22.05.2009 13:26

Ответ: Управление переименованными чайлдами
 
Ну да, я вообще в типах не шарю, а ты тут кидаешь пост о продвинутой работе с типами; очень, блин, полезно.

MiXaeL 22.05.2009 13:35

Ответ: Управление переименованными чайлдами
 
Не о продвинутой работе, а просто про хендлы, о которых и говорил Холи.
Кстати, в том же FAQ есть вот это
А еще можно заглянуть в хелп и пример Castle. Я на нем типы выучил.

Damp 22.05.2009 14:28

Ответ: Управление переименованными чайлдами
 
Ну если не хендл, раз с типами сложно, то номер переменных в массивах.
Т.е. создай массивы
Dim Name$(n)
Dim UnitEnt(n)
Dim Life(n)
а в имена пиши n.
Хотя типы надо знать конечно.

karry 23.05.2009 04:18

Ответ: Управление переименованными чайлдами
 
Кстати, обнаружил что рекурсии, для обращения к LoadAnimMesh, абсолютно не нужны. Нужно только весь анимированный меш поместить под общего родителя в редакторе, и всё прекрасно работает точно так же как и с LoadMesh, и текстуры накладываются одной командой, и альфа меняется для всех сразу, и всё остальное.

karry 23.05.2009 13:15

Ответ: Управление переименованными чайлдами
 
Цитата:

Кстати, в том же FAQ есть вот это
Ужас, кстати. В хелпе о типах написано раз в пятьдесят более внятно. Это только так кажется, что кто угодно может написать разъяснение к какой-то вещи, и кто угодно прочитав это разъяснение обязан его понять. Тем кто пишет учебники деньги не зря платят.

karry 23.05.2009 16:29

Ответ: Управление переименованными чайлдами
 
Переписываю программку под типы...вроде удобнее, но с другой стороны переменных получается в два-три раза больше чем без типов. :-D

А, вот, как проверить принадлежит ли какая-нибудь Entity определенному типу ? Допустим клик на объект, затем распознавание типа объекта, например "свой-чужой-нейтрален", и в зависимости от этого производить действия.
Допустим у меня стоит в типе "Field loyalty=enemy", но как узнать существует ли в выбранном типе такое поле ? Опять же надо как-то узнать принадлежит ли объект к типу вообще, или просто одинокий Entity.

H@NON 23.05.2009 20:25

Ответ: Управление переименованными чайлдами
 
Для этого записываешь в имя ентити хендл на его тип. Затем когда выбираешь ентити, читаешь хендл на тип из его имени и получаешь доступ к полям типа, вот так:
NameEntity b\entity, Handle(b)
....
pick = CameraPick(camera, mx, my)
If Pick <> 0 Then
b.bot = Object.Bot(EntityName(Pick))
If b <> Null Then
;-- Обработка событий
Select b\loyalty
case Svoi
///////
case Chujoi
///////
case Neitral
///////
End Select
EndIf
EndIf

karry 23.05.2009 20:38

Ответ: Управление переименованными чайлдами
 
H@NON
Вот ты пишешь :
Код:

b.bot = Object.Bot(EntityName(Pick))
То есть подразумевается что ты кликаешь на тип .bot.
а если у меня десять типов ? И у всех свои уникальные поля.
Тип здание, тип ёлка, тип камень, мало ли, как тогда ?

А для узкого применения способ наверное хороший.

H@NON 23.05.2009 21:47

Ответ: Управление переименованными чайлдами
 
Для выбора из нескольких типов конструкция примет такой вид:
Код:

b.bot = Object.Bot(EntityName(Pick))
If b <> Null Then
....
else
      t.turrel = Object.turrel(EntityName(Pick))
      If t <> Null Then
      ....
      else
            u.unit = Object.unit(EntityName(Pick))
            If u <> Null Then
            ......
            else
                  bs.boss = Object.Boss(EntityName(Pick))
                  If bs <> Null then
                  ........
                  EndIf
            EndIf
      EndIf
EndIf


karry 23.05.2009 22:47

Ответ: Управление переименованными чайлдами
 
Погоди-погоди...
дай-ка вкурить...

Поправьте меня если я где-то ошибаюсь.
-Вот я назначаю хэндл на имя меша, фактически.
-Затем делаем пик на меше.
-Проверяем существует ли объект.
-Назначаем временную переменную, присваиваем ей первый попавшийся тип, и выполняем команду Object этого же типа от пикнутого имени.
-Если тип временной переменной совпадает с Object от пикнутого - выполняем дальше, если нет - Object возвращает 0, выполняем Else.

Я верно понимаю ?

karry 23.05.2009 23:56

Ответ: Управление переименованными чайлдами
 
Хм, так вот, быть может я и не полностью понимаю как, но оно работает, за одним исключением :
Я поставил в сцену шарик не принадлежащий ни одному из типов, и вывожу содержание любого случайного поля любого типа - Text 20,20,unit\blabla, так вот если кликнуть на одиноко стоящий Entity "безтипного" шарика, то программа валится по причине несуществования unit\blabla. Можно конечно и не выводить этот текст, или не присваивать чему попало PickMode 2, но не грозит ли это какими-нибудь непредвиденными осложнениями в дальнейшем ?

Поправка : любые операции вне цикла с Object - валят программу по причине несуществования.


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

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