forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Как проиграть анимацию определенного чайлда? (http://forum.boolean.name/showthread.php?t=16240)

mr.DIMAS 27.01.2012 14:23

Как проиграть анимацию определенного чайлда?
 
Вложений: 1
Q: Как проиграть анимацию определенного чайлда?
А: Если попробовать сделать так:
Код:

entity = LoadAnimMesh( "mesh.b3d" )
child  = FindChild( entity, "child" )
Animate child

То ничего не получится - блиц скажет, что объект не анимирован - даже если он анимирован! Но что же делать? А вот что: нужно скопировать ключевые кадры корня сцены( scene root ) во все его чайлды! Для этого есть следующие функции:
Код:

Function iSetAnimKey( mesh, float key )

    SetAnimKey( mesh, key )

    For i = 1 To bbCountChildren( mesh )
        iSetAnimKey( GetChild( mesh, i ), key )
    Next

End Function

Function animateAllChilds( mesh )

    Local length% = AnimLength( mesh )

    For i = 1 To length - 1
        SetAnimTime( mesh, i, 0 )
        iSetAnimKey( mesh, i )
    Next

    For j = 1 To CountChildren( mesh )
        ent = GetChild( mesh, j )

        AddAnimSeq( ent, length )
    Next

End Function

Вызвав animateAllChilds для модельки Вы сможете анимировать только необходимую Вам часть! Например так:
Код:

entity = LoadAnimMesh( "mesh.b3d" )
animateAllChilds( entity )
child  = FindChild( entity, "child" )
Animate child

Теперь появилась возможность создавать интерактивные карты для Вашей игры! Не нужны никакие "расстановщики дверей, окон, машин..." т.е редакторы теперь все можно сделать в максе!!

ЗЫ. За точность блицевского кода не ручаюсь, т.к последние полтора года пишу на C++ с B3D SDK.

В аттаче есть пример.

Управление WSAD, пробел - прыжок. Левая кнопка мыши - запустить лифт/платформу( нужно навестись на него в левом верхнем углу загорится надпись). Пример написан на C++ с B3D SDK. Буду очень признателен если кто-нибудь переведет его на блиц.;)

Arton 27.02.2014 23:19

Ответ: Как проиграть анимацию определенного чайлда?
 
Всё верно, но надо добавить стоп анимации, иначе при инициализации всё будет отмотано на последний кадр.

Код:

Function iSetAnimKey( mesh, key)

    SetAnimKey( mesh, Float (key) )

    For i = 1 To CountChildren( mesh )
        iSetAnimKey( GetChild( mesh, i ), Float (key)  )
    Next

End Function

Function animateAllChilds( mesh )

    Local length% = AnimLength( mesh )

    For i = 1 To length - 1
        SetAnimTime( mesh, i, 0 )
        iSetAnimKey( mesh, i )
    Next

    For j = 1 To CountChildren( mesh )
        ent = GetChild( mesh, j )

        AddAnimSeq( ent, length )

                Animate ent,0,1,0,0

    Next

End Function


IgorOK 02.03.2014 12:01

Ответ: Как проиграть анимацию определенного чайлда?
 
А с костями это работает?

Arton 06.03.2014 00:03

Ответ: Как проиграть анимацию определенного чайлда?
 
Цитата:

Сообщение от IgorOK (Сообщение 275792)
А с костями это работает?

Блин, а до костей я не добрался. Подозреваю что да.

Проверил, всё работает.

P. S. Сначала не получилось, думал надо анимировать кости, но видимо это у меня глюк был :dontknow:


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

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