Я должен был сделать нечто подобное давным-давно. Поскольку это был AS2, я использовал фрагмент от Senocular.
Если вам нужны буквы в строке, это должно быть достаточно просто, используя textWidth :
var theText:String = 'text on a path';
var letters:Array = [];
var lettersNum:int = theText.length;
for(var i:int = 0; i < lettersNum; i++){
var t:TextField = new TextField();
t.defaultTextFormat = new TextFormat('Verdana',12,0x000000);
t.embedFonts = true;
t.text = theText.charAt(i);
t.selectable = false;
letters.push(t);
addChild(t);
if(i > 0) t.x = letters[i-1].x + letters[i-1].textWidth;
}
Я пытался быстро и легко разобраться в ситуации, используя TweenMax .
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
TweenPlugin.activate([BezierThroughPlugin, BezierPlugin]);
var theText:String = 'text on a path';
var letters:Array = [];
var lettersNum:int = theText.length;
for(var i:int = 0; i < lettersNum; i++){
var t:TextField = new TextField();
t.defaultTextFormat = new TextFormat('Verdana',12,0x000000);
t.embedFonts = true;
t.text = theText.charAt(i);
t.selectable = false;
letters.push(t);
addChild(t);
//if(i > 0) t.x = letters[i-1].x + letters[i-1].textWidth;
var tween:TweenMax = TweenMax.to(t, 3, {bezierThrough:[{x:0, y:0},{x:50, y:50},{x:100, y:0}], orientToBezier:true, ease:Linear.easeNone});
tween.complete(true,true);
tween.currentProgress = i/lettersNum;
}
Не очень хороший. Вложение TextFields в некоторые спрайты, для регулировки положения буквы на пути (вертикальное смещение) было бы удобно, также, интервал является проблемой, поскольку BezierThrough использует Quadratic Beziers. Кривые Эрмита должны быть более точными.
Джим Армстронг - человек по математике. Его работа над Деграфа удивительна, если вы не ограничены, Деграфа уже имеет множество функций для подобных вещей.
НТН