我试图在贝塞尔曲线上放置动态生成的文本 - 文本长达12个字符,所以需要调整到中心。在贝塞尔曲线上创建动态文本字段 - AS3
我找不到任何企图在谷歌上做到这一点。
我唯一的猜测是读一个贝塞尔曲线xy,然后将textfield放在那,但我怎么会得到文本字段以适应曲线?
谢谢!
马库斯
我试图在贝塞尔曲线上放置动态生成的文本 - 文本长达12个字符,所以需要调整到中心。在贝塞尔曲线上创建动态文本字段 - AS3
我找不到任何企图在谷歌上做到这一点。
我唯一的猜测是读一个贝塞尔曲线xy,然后将textfield放在那,但我怎么会得到文本字段以适应曲线?
谢谢!
马库斯
如果你的曲线是圆弧或圆我刚才正确的事情你:P 我做了两个班,前一段时间在此处理这一点,他们来了:
package com.display{
import flash.display.Sprite;
import utils.Utils;
public class PathText extends Sprite
{
private var _text:String;
private var _chars:Array;
private var _startAngle:Number;
private var _stopAngle:Number;
private var _radius:Number;
public function PathText(__text:String, __radius:Number)
{
super();
this.mouseChildren = false;
this.mouseEnabled = false;
_text = __text;
_startAngle = 0;
_radius = __radius;
_chars = new Array();
init();
}
private function init():void
{
for(var i:int = 0; i < _text.length; i++)
{
var char:Char = new Char(_text.charAt(i));
_chars.push(char);
}
drawArc(_radius);
}
public function drawArc(rad:Number):void
{
var lastAngle:Number = 0;
for(var i:int = 0; i < _chars.length; i++)
{
var angle:Number = 2 * Math.sin((_chars[i].width/2)/rad);
_chars[i].rotation = radiansToDegrees(lastAngle) + 90;
_chars[i].x = rad * Math.cos(lastAngle);
_chars[i].y = rad * Math.sin(lastAngle);
lastAngle += angle;
addChild(_chars[i]);
}
_stopAngle = radiansToDegrees(lastAngle);
}
public function destroy():void
{
for(var i:int = _chars.length; i >= 0; i--)
{
removeChild(_chars[i]);
_chars.pop().destroy();
}
}
public function get startAngle():Number
{
return _startAngle;
}
public function set startAngle(value:Number):void
{
_startAngle = value;
}
public function get stopAngle():Number
{
return _stopAngle;
}
public function set stopAngle(value:Number):void
{
_stopAngle = value;
}
private function radiansToDegrees(radians:Number):Number
{
return radians * 180/Math.PI;
}
}
}
与焦炭类:
package com.display
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
public class Char extends Sprite
{
private var _str:String;
public function Char(__str:String)
{
super();
_str = __str;
this.mouseChildren = false;
this.mouseEnabled = false;
init();
}
private function init():void
{
var _tf:TextField = new TextField();
_tf.defaultTextFormat = new TextFormat("Some Font here", 15, 0xffffff);
_tf.embedFonts = true;
_tf.mouseEnabled = false;
_tf.selectable = false;
_tf.text = _str;
_tf.autoSize = TextFieldAutoSize.LEFT;
_tf.width = _tf.textWidth;
addChild(_tf);
}
public function destroy():void
{
this.removeChildAt(0);
}
public function get str():String
{
return _str;
}
public function set str(value:String):void
{
_str = value;
}
}
}
告诉我,如果你的作品... 喝彩!
嗨马库斯, 你是想适应一个“动态曲线”,或者它是一个弧或圆? – Drala 2012-07-11 13:25:24