实现内容:文字旋转1.---以文字的左顶点为中心旋转
2.---以指定点位中心旋转
3.---自动旋转
所使用知识:位图数据, 文字显示,绘图, 定时器,事件侦听
关键字:TextField TextFormat BitmapData Bitmap Sprite Timer
1.首先说明, TextField, Bitmap 都可以addChild到Sprite中, 并且自动会放到显示画布的左顶点处
2.TextField, Bitmap都有x,y属性 ,定义相对父级容器的位置。设置他们的x,y值即可以更改它们的显示位置
3.BitmapData 有rect 属性,但是它为只读。因此我理解为它是没有位置概念的,但是我们可以在创建的时候定义它的大小,即设定width, height.以下可参看具体代码
方案一:文本能显示,但不能旋转
创建文本:
var s:Sprite = new Sprite;
//将该Sprite放到要显示的父级容器中
var t:TextField = new TextField;
t.text = "2599";
//设置字体
var f:TextFormat = new TextFormat;
f.font = "Airal";
f.size = 30;
f.color = 0x00ffff;
f.bold = true;
//将字体设置的文本中
t.setTextFormat(f);
//将文本放到Sprite中
s.addChild(t);
文本可以显示了
现在我们旋转Sprite
s.rotation = 10;
结果:你会发现文本消失了。
事实上,文本已经存在于rotation=0的位置,它虽然是Sprite的子级,但是不能跟着它旋转。
方案二:文本能显示,能旋转10度
var s:Sprite = new Sprite;
var t:TextField = new TextField;
t.text = "2599";
var f:TextFormat = new TextFormat;
f.font = "Airal";
f.size = 30;
f.color = 0x00ffff;
f.bold = true;
t.setTextFormat(f);
//将文本转成位图
//t.width,t.height 是文本的像素高度,true表示它为透明, null表示无背景颜色
var b:BitmapData = new BitmapData(t.textwidth, t.textHeight, true, null);
b.draw(t);
//思考一下,t.x设置后再draw, 会对BitmapData有影响吗?----------------------答案:不会有
var m:Bitmap = new Bitmap(b);
m.x = 50;
s.addChild(m);
s.rotation = 10;
能正确旋转了
方案三:文本能显示,能旋转10度
var s:Sprite = new Sprite;
var t:TextField = new TextField;
t.text = "2599";
var f:TextFormat = new TextFormat;
f.font = "Airal";
f.size = 30;
f.color = 0x00ffff;
f.bold = true;
t.setTextFormat(f);
var b:BitmapData = new BitmapData(t.width, t.height, true, null);
//如果上面用t.textWidth会怎样?---------------------文本显示不全
b.draw(t);
s.graphic.clear();
s.graphic.beginBitmapFill(b);
s.graphic.drawRect(400, 0, t.textWidth, t.textHeight);//注意,区别 t.textWidth和t.Width
s.graphic. endFill();
s.rotation = 10;
能正确旋转了
方案四:文本能显示,能自动旋转
//添加TIMER
var tm:Timer = new Timer(50);
tm.start();
tm.addEventListener(TimerEvent.TIMER, timerFun);
public function timerFun(ev:TimerEvent):void // 一定要符合事件函数的写法规范
{
s.rotation +=10;
}
好了,一切大功告成。
祝你好运~~~~