ну рисуем постоянно по точкам, а точки 'резиново' твиним к заранее размеченным для цифирок

Код AS3:
{
import flash.display.*;
import flash.events.*;
import flash.utils.Timer;
[SWF(width="300", height="100", backgroundColor="#000000")]
public class Main extends Sprite
{
private var digs:Array = [];
private var size:int = 32;
public function Main():void
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
for (var i:int = 0; i < 6; i++)
{
var dig:LiveDigit = new LiveDigit(0, size, 0xFF9900, 3);
dig.x = size * (i + 1) + (i > 1 ? 0.3 * size : 0) + (i > 3 ? 0.3 * size : 0);
dig.y = size;
addChild(dig);
digs.push(dig);
}
var tick:Timer = new Timer(1000);
tick.addEventListener(TimerEvent.TIMER, tick_Timer);
tick.start();
tick_Timer(null);
}
private function tick_Timer(e:TimerEvent):void
{
var d:Date = new Date();
var h:int = d.getHours();
var m:int = d.getMinutes();
var s:int = d.getSeconds();
var nums:Array = [];
nums[0] = Math.floor(h / 10);
nums[1] = h % 10;
nums[2] = Math.floor(m / 10);
nums[3] = m % 10;
nums[4] = Math.floor(s / 10);
nums[5] = s % 10;
for (var i:int = 0; i < 6; i++)
{
digs[i].value = nums[i];
}
}
}
}
//======================================//
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;
class LivePoint extends Point
{
public var vX:Number = 0;
public var vY:Number = 0;
public var iX:Number;
public var iY:Number;
private var kA:Number = 0.125;
private var kB:Number = 0.75;
public function LivePoint(x:Number = 0, y:Number = 0)
{
super();
iX = x;
iY = y;
}
public function step():void
{
vX += kA * (iX - x);
vY += kA * (iY - y);
x += vX *= kB;
y += vY *= kB;
}
}
//======================================//
class LiveDigit extends Sprite
{
static private var mapXY:Array = [
[73, 27, 67, 0, 24, 4, 0, 83, 25, 104, 59, 88, 73, 29],
[25, 44, 54, 21, 60, -6, 36, 96, 33, 100, 3, 99, 54, 96],
[19, 10, 40, -3, 72, 16, 56, 58, -9, 102, 28, 94, 57, 98],
[36, 5, 78, 0, 62, 37, 42, 49, 72, 40, 58, 102, 11, 89],
[26, 1, 15, 40, 16, 65, 64, 62, 84, -14, 58, 75, 51, 104],
[70, 5, 45, 11, 20, -2, 16, 43, 73, 42, 52, 108, 6, 87],
[50, 0, 23, 19, 5, 63, 13, 103, 63, 95, 61, 39, 15, 52],
[19, 3, 86, 1, 48, 37, 15, 119, 48, 48, 30, 40, 56, 54],
[80, 5, 0, 100, 45, 97, 72, 59, 30, 34, 39, -1, 84, 0],
[69, 15, 24, -4, 9, 56, 58, 67, 75, -10, 58, 74, 18, 102]];
private var size:Number;
private var color:uint;
private var thickness:int;
private var points:Array = [];
private var _value:int;
public function LiveDigit(value:int, size:int, color:uint, thickness:int)
{
this.thickness = thickness;
this.color = color;
this.size = size;
for (var i:int = 0; i < 7; i++)
{
points.push(new LivePoint());
}
this._value = value;
addEventListener(Event.ENTER_FRAME, this_enterFrame);
}
private function this_enterFrame(e:Event):void
{
var i:int;
for (i = 0; i < 7; i++)
{
points[i].step();
}
graphics.clear();
graphics.lineStyle(thickness, color);
graphics.moveTo(points[0].x, points[0].y);
for (i = 0; i < 6; i++)
{
graphics.curveTo(points[i].x, points[i].y, (points[i].x + points[i + 1].x) / 2, (points[i].y + points[i + 1].y) / 2);
}
graphics.lineTo(points[6].x, points[6].y)
}
public function get value():int { return _value; }
public function set value(value:int):void
{
_value = value;
var coord:Array = mapXY[_value];
for (var i:int = 0; i < 7; i++)
{
points[i].iX = coord[2 * i] * size / 100;
points[i].iY = coord[2 * i+1] * size / 100;
}
this_enterFrame(null);
}
}