本文整理汇总了C++中AnimationPlayer::add_animation方法的典型用法代码示例。如果您正苦于以下问题:C++ AnimationPlayer::add_animation方法的具体用法?C++ AnimationPlayer::add_animation怎么用?C++ AnimationPlayer::add_animation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AnimationPlayer
的用法示例。
在下文中一共展示了AnimationPlayer::add_animation方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _parse_animations
//.........这里部分代码省略.........
Array parent_keyframes;
if (sk->get_bone_parent(bone_idx)!=-1) {
String parent_name = sk->get_bone_name(sk->get_bone_parent(bone_idx));
if (state.bones.has(parent_name)) {
parent_xform_dict=state.bones[parent_name].node;
}
print_line("parent for "+bone+"? "+parent_name+" XFD: "+String(Variant(parent_xform_dict)));
for(int k=0;k<bone_tracks.size();k++) {
Dictionary d = bone_tracks[k];
if (d["boneId"]==parent_name) {
parent_keyframes=d["keyframes"];
print_line("found keyframes");
break;
}
}
}
print_line("BONE XFD "+String(Variant(xform_dict)));
Array keyframes=bone_track["keyframes"];
for(int k=0;k<keyframes.size();k++) {
Dictionary key=keyframes[k];
Transform xform=_get_transform_mixed(key,xform_dict);
float time = key["keytime"];
time=time/1000.0;
#if 0
if (parent_keyframes.size()) {
//localize
print_line(itos(k)+" localizate for: "+bone);
float prev_kt=-1;
float kt;
int idx=0;
for(int l=0;l<parent_keyframes.size();l++) {
Dictionary d=parent_keyframes[l];
kt=d["keytime"];
kt=kt/1000.0;
if (kt>time)
break;
prev_kt=kt;
idx++;
}
Transform t;
if (idx==0) {
t=_get_transform_mixed(parent_keyframes[0],parent_xform_dict);
} else if (idx==parent_keyframes.size()){
t=_get_transform_mixed(parent_keyframes[idx-1],parent_xform_dict);
} else {
t=_get_transform_mixed(parent_keyframes[idx-1],parent_xform_dict);
float d = (time-prev_kt)/(kt-prev_kt);
if (d>0) {
Transform t2=_get_transform_mixed(parent_keyframes[idx],parent_xform_dict);
t=t.interpolate_with(t2,d);
} else {
print_line("exact: "+rtos(kt));
}
}
xform = t.affine_inverse() * xform; //localize
} else if (!parent_xform_dict.empty()) {
Transform t = _get_transform(parent_xform_dict);
xform = t.affine_inverse() * xform; //localize
}
#endif
xform = sk->get_bone_rest(bone_idx).affine_inverse() * xform;
Quat q = xform.basis;
q.normalize();
Vector3 s = xform.basis.get_scale();
Vector3 l = xform.origin;
an->transform_track_insert_key(tidx,time,l,q,s);
}
}
}
ap->add_animation(_id(anim["id"]),an);
}
return OK;
}