forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Загрузка карты из 3ds (http://forum.boolean.name/showthread.php?t=7736)

mr.DIMAS 31.01.2009 19:35

Загрузка карты из 3ds
 
Вопрос: У меня есть карта уровня, сделанная в 3Ds max и я хочу чтобы в тех местах карты, которые указал создавались разнообразные объекты. Как сделать?
Ответ: Очень просто. Мы просто перебираем все объекты в модели уровня и ищем нужные нам, а на их местах создаем необходимые объекты. Итак рассмотрим этот алгоритм по подробнее.
Как известно в каждой модели есть множество подмоделей, так называемых чайлдов (child - ребенок). Эти подмодели могут свободно трансформироватся(вращение, перемещение, растяжение\сжатие), удаляться, и т.п, т.е с ними можно делать все что и с обычными блицевскими объектами, а так же получить его имя, которое было задано в редакторе. Этим мы и воспользуемся. Теперь напишем небольшую функцию анализа модели.

Код:


Function AnalyzeModel( mesh$ )
 temp = LoadAnimMesh(mesh$)
  For ch = 1 to CountChildren( temp )
  obj = GetChild(temp,ch)
  name$ = EntityName$(obj)
  If InStr(name$,"имя объекта в модели уровня") <> 0 Then
    Нужное_Действие
  End if
 Next
 FreeEntity temp
End Function

Теперь рассмотрим эту функцию. В нее передается всего один параметр - путь к модели уровня. Второй строкой - загружаем сам уровень как анимированную модель чтобы иметь доступ к чайлдам. Третьей строкой запускаем цикл перебора всех моделей в уровне. Четвертой строкой получаем модель с нужным номером(указывается циклом). Пятой - получаем имя модели, которое указывали в редакторе. Шестой - анализируем строку с именем модели и находим в нем нужное имя ( указывается вместо "имя объекта в модели уровня" ) и если таковое нашлось то выполняем Седьмую строку. Предпоследней строкой - удаляем модель уровня.
Результат: на указанных местах появляются указанные объкты.
Вроде все разжвевал как надо.

Вопрос: Как её использовать и вообще работает она?
Ответ: Пишем в нужном месте AnalyzeModel и указываем путь к анализируемой модели уровня. Функция сто пудов работает.

Вопрос: Насколько быстра эта функция?
Ответ: Все зависит от выполняемых операций внутри If Instr... End If .

HolyDel 31.01.2009 19:42

Ответ: Загрузка карты из 3ds
 
надо рекурсией делать.

mr.DIMAS 31.01.2009 19:46

Re: Загрузка карты из 3ds
 
имхо для новичков понятней будет так :-) :-) :-)

ABTOMAT 31.01.2009 21:48

Ответ: Re: Загрузка карты из 3ds
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 96460)
имхо для новичков понятней будет так :-) :-) :-)

Зато протом кто-то умный что-то к чему-то привяжет и полезут вопросы "а у миня неработает!!!"

mr.DIMAS 31.01.2009 23:25

Re: Загрузка карты из 3ds
 
блин написал так что дауну должно быть понятно. имхо эта функция оч быстро работает

HolyDel 01.02.2009 00:29

Ответ: Загрузка карты из 3ds
 
mr.DIMAS, функция работает очень быстро, но неправильно. Стоит моделлеру привязать "что то к чему то"(с)АВТОМАТ, как тут же начнутся глюки в виде не-появления объекта на сцене. Особенно новичкам будет сложно понять почему.

Да и не слишком сложнее в общем то:
Код:

Function LoadLevel(levelfile$)
 levelmesh = LoadAnimMesh(mesh$)
end function

Function AnalyzeModel( mesh$ )
  For ch = 1 to CountChildren( temp )
  obj = GetChild(temp,ch)
  name$ = EntityName$(obj)
  If InStr(name$,"имя объекта в модели уровня") <> 0 Then
    Нужное_Действие
  End if

  if CountChildren(obj)>0 then AnalyzeModel(obj)
 Next
 FreeEntity temp
End Function


mr.DIMAS 01.02.2009 16:23

Re: Загрузка карты из 3ds
 
аа щас врубил, функция еще и в составных объектах ищет то что нужно


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

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