SDL中文论坛
标题:
周期动画、does_not_change_变量
[打印本页]
作者:
ancientcc
时间:
2017-6-1 21:01
标题:
周期动画、does_not_change_变量
本帖最后由 ancientcc 于 2017-6-3 08:47 编辑
does_not_change_是画线中变量,它指示该画线是否只有一个图元,ture表示只有一个“图元”,否则不是。对于只有一个图元时,动画逻辑会对它简化处理。
只有一个图元不等于只有一帧,像逐进变量就可能一帧导致多个图元,参考:frame_parsed_parameters::does_not_change();
当用替换法代替了逐进变量时,须重新计算does_not_change_。参考:unit_animation::particular::replace_progressive(...);
当是does_not_change_==true时,韦诺原代码有不能使之是周期动线BUG,须修改。
<kingdom-src>/src/animated.i
template<typename T, typename T_void_value>
void animated<T,T_void_value>::update_last_draw_time(double acceleration)
{
......
if (does_not_change_)
return;
if (!started_) {
return;
}
......
}
改为
template<typename T, typename T_void_value>
void animated<T,T_void_value>::update_last_draw_time(double acceleration)
{
......
if (does_not_change_ && !cycles_) // 增加必须!cycles_
return;
if (!started_) {
return;
}
......
}
复制代码
对周期动画,所有画线必须在同一时刻开始播放下一周期!
class animated中cycles_指示的是该画线需周期播放,如果画线只是按cycles=true和自已播放完了就开始下一周期,那对于多画线、各画线播放时间还不同的周期动画来说,从下一周期开始动画就乱了。为此,一画线判断是否要下播放进入下一周期不仅仅要看最后一帧播放完,它可能还须要等,直到外界告诉它所有画线都播放完了,即这一动画周期已结束。
外界如何额外告诉画线此动画所有画线播放完了,一种方法是修改update_last_draw_time,让增加个可启动下一周期参数;第二种方法是先用animation_finished_potential()判断,一旦判断出播放完了,调用start_animation让重启一次播放。
此个动画设的cycles_是false!
void draw_canvas_anim(display& disp, int id, surface& canvas, const SDL_Rect& rect)
{
......
if (anim.animation_finished_potential()) {
anim.start_animation(0, map_location::null_location, map_location::null_location, false);
} else {
anim.update_last_draw_time();
}
......
}
复制代码
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3