forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   проблемы с анимацией (http://forum.boolean.name/showthread.php?t=10955)

Артем Валерьевич 28.11.2009 09:34

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

H@NON 28.11.2009 14:47

Ответ: проблемы с анимацией
 
Объясню что тебе нужно разобрать. При загрузке модели, которую тебе нужно анимировать в программе используй команду LoadAnimMesh, именно она загружает модель со всеми чилдами входящими в нее, в отличие команды LoadMesh(), которая объединяет все чилды в один меш и мы уже не сможим получить доступ к ним. Если у тебя анимация и модель находиться в одном файле, то тебе, чтобы вычленить Часть анимации нужно использовать ExtractAnimSeq(entity, frameStart, frameEnd), если же ты хранишь анимацию в отдельном файле от модели, то тогда используй команду LoadAnimSeq(entity, "file.b3d"). Причем, при создании анимации со скелетом ты этот самый скелет крепишь именно к какому-то чилду в модели перед экспортом в б3д. Чтобы найти этот чилд с анимацией, тебе нужно воспользоваться командой FindChild(model, "name"), причем тут очень важен регистр твоего названия, например чилд с именем "aNiMaTe" и "animate" будут разными чилдами, учти это. Когда ты найдешь этот чилд с анимацией всю обработку анимации веди с ним, то есть запускай анимацию именно для этого чилда, а не для модели. Теперь пойми, что "Запускать" и "Обновлять" это разные вещи, обновление анимации ведет команда UpdateWorld() и ее лучше ставить прямо перед командой RenderWorld(), а вот чтобы ЗАПУСТИТЬ анимацию нужно единожды вызвать команду Animate. Я например пользуюсь следующей схемой : Проверяю нажата ли нужная кнопка, проверяю проигрывается ли необходимая секвенция, и если не проигрывается, то запустить анимацию, также и при отпускании, проверяю, если не нажаты кнопки движения (или действия), то проиграть анимацию ожидания, либо вообще остановить анимацию. Теперь приблизительный код, который должен у тебя сложиться в результате понимания всего что я тебе написал :
Код:

model = LoadAnimMesh("model.b3d")
animChild = FindChild(model, "Animate")
seqIdle = ExtractAnimSeq(animChild, 0, 19)
seqRun = ExtractAnimSeq(animChild, 20, 40)

Repeat
    If KeyDown(200) Then
            If AnimSeq(animChild) <> seqRun Then Animate animChild, 1, 0.2, seqRun
    Else
            If AnimSeq(animChild) <> seqIdle Then Animate animChild, 1, 0.2, seqIdle
    EndIf

    UpdateWorld()
    Renderworld()
Until KeyDown(1)

end


KingMaks 28.11.2009 19:22

Ответ: проблемы с анимацией
 
все получилось))
тока чуток поправка:
model = LoadAnimMesh("model.b3d")
animChild = FindChild(model, "Animate")
seqIdle = ExtractAnimSeq(animChild, 0, 19)
seqRun = ExtractAnimSeq(animChild, 20, 40)

Repeat
If KeyDown(200) Then
If AnimSeq(animChild) <> seqRun Then Animate seqChild, 1, 0.2, animRun
Else
If AnimSeq(animChild) <> seqIdle Then Animate seqChild, 1, 0.2, animIdle
EndIf

UpdateWorld()
Renderworld()
Until KeyDown(1)

end

H@NON 28.11.2009 19:29

Ответ: проблемы с анимацией
 
откуда ты взял seqChild, animIdle и animRun ?
В коде ты этих переменных не объявлял, может опечатался ты?

KingMaks 28.11.2009 20:10

Ответ: проблемы с анимацией
 
тю блин точно во:

model = LoadAnimMesh("model.b3d")
animChild = FindChild(model, "Animate")
seqIdle = ExtractAnimSeq(animChild, 0, 19)
seqRun = ExtractAnimSeq(animChild, 20, 40)

Repeat
If KeyDown(200) Then
If AnimSeq(animChild) <> seqRun Then Animate animChild, 1, 0.2, seqRun
Else
If AnimSeq(animChild) <> seqIdle Then Animate animChild, 1, 0.2, seqIdle
EndIf

UpdateWorld()
Renderworld()
Until KeyDown(1)

end

LUK 29.11.2009 22:53

Ответ: проблемы с анимацией
 
Зачем так все наехали на человека? Ну новичок, и что? Все такими были...

А проблема с костной анимацией - это довольно сложная вещь - сам когда-то с ней не одну неделю пропарился... так, что логично, что человек задал вопрос... после 10-20 неудачных попыток реализации...

А вообще, я рад, что он завел эту тему... наконец, на форуме появилась тема о анимации , где все уже 100% разжеванно... Сам когда-то в панике бился по поиску и по крохам искал как и что... а теперь есть все и в одном. Так, что пусть эта тема будет небольшим маном для новичков и хорошей памяткой для старожил...

Даже, в подпись добавлю ссыль...

Dream 29.11.2009 22:55

Ответ: проблемы с анимацией
 
спорим на пиво, что через месяц появится ещё одна тема, от новичка, с такими же вопросами?

LUK 29.11.2009 22:59

Ответ: проблемы с анимацией
 
Цитата:

Сообщение от DimasSup (Сообщение 127556)
спорим на пиво, что через месяц появится ещё одна тема, от новичка, с такими же вопросами?

Тогда даешь ему ссыль на:
http://forum.boolean.name/showthread.php?t=10955&page=3

И просишь модератора закрыть тему.

И еще - люди хватит флудить уже не по делу...

Dream 29.11.2009 23:03

Ответ: проблемы с анимацией
 
:)) перестаю флудить)) просто глупо тыкать носом. они же не щеночки, чтобы так указывать что и где...

NitE 29.11.2009 23:26

Ответ: проблемы с анимацией
 
http://forum.boolean.name/showthread.php?t=7525
Костная анимация в B3D- если хочешь разобраться - читать тему от корки до корки!!!

модераторы закройте тему !

LUK, то что ты не видел миллиона идентичных тем - не значит что их нет...

LUK 29.11.2009 23:29

Ответ: проблемы с анимацией
 
Цитата:

Сообщение от NitE (Сообщение 127562)
LUK, то что ты не видел миллиона идентичных тем - не значит что их нет...

Я не говорил, что их нет... Это логично, что есть... Но когда этим вопросом занимался лично я - ничего нормального не нашел... (Да и проблема у меня была несколько другая...)

Цитата:

Сообщение от NitE (Сообщение 127562)
Костная анимация в B3D- если хочешь разобраться - читать тему от корки до корки!!!

Зачем мою подпись-то цитировать? =) =) =)

ЗЫ: Согласен, закройте тему, плз, и почистите флуд!


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

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