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. Буду очень признателен если кто-нибудь переведет его на блиц.