Render
函数需要多次执行才能仅被调用一次(用于输入数据收集)。我可以每次强制调用Render
函数,它不会破坏代码,但最终会很慢。
在画布之外多次调用了延迟的更新(并非始终是),无法知道这些调用的时间或顺序。
假设我无法控制OnFrame
函数的帧频速度。
是否有更好的方法,不使用,使用计时器或事件在数据收集完成后重新绘制画布?
这是我到目前为止所得到的:
// called in many places
canvas.InputData( x );
// ---------------------- Canvas class -------------------
data = new Dictionary();
InputData( key, x )
{
data[ key ] = x;
Delayed_Render();
}
_counter = 0;
_request = false;
_delayed = false;
_complete = false;
Delayed_Render()
{
if( _request || ! _complete ) return;
_request = true;
_complete = false;
}
override OnFrame()
{
if( ++ _counter < 10 ) return;
_counter = 0;
if( _request )
{
_request = false;
_delayed = true;
Render();
}
}
override OnResize()
{
Render();
}
Render()
{
// ....................................
// code to render canvas using the data
// ....................................
if( _delayed )
{
_complete = true;
_delayed = false;
}
}