-
用AS做一个鼠标跟随的信息提示框
如上例子所示,有很多实现的方法,以前我也在场景中画好一个黑色的背景然后在上面加文字来实现,现在自己想用纯AS来写。
流程是用AS写好一个类实现画背景图、文字、鼠标跟随、隐藏的方法,然后在其他地方写事件触发它。请看tips.as代码:
package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;public class tips extends MovieClip {
private var tx:Number = 0;
private var ty:Number = 0;
private var myText:TextField = new TextField();
private var box:Sprite = new Sprite();
public function tips() {
//trace(”构造”);
init();
out();
}
//不显示
public function out():void {
this.visible = false;
}
//显示
public function show():void {
this.visible = true;
}
private function init():void {
//this.alpha = 0.8;
drawBox(200,50);
addChild(myText);
myText.x = 5;
myText.y = 5;
myText.wordWrap = true;
myText.textColor = 0xffffff;
addEventListener(Event.ENTER_FRAME , onFrameHand);
}
public function setWidth(w:int , h:int):void {
box.width = w;
box.height = h;
myText.width = w – 10;
myText.height = h – 10;
}
//画一个文字的底图
private function drawBox(vWidth:int = 100 , vHeight:int = 100) {
box.graphics.beginFill(0×000000,0.8);
box.graphics.lineStyle(1, 0xffffaa,0.8);
box.graphics.drawRect(0,0,vWidth,vHeight);
box.graphics.endFill();
this.addChildAt(box,0);
}
//写text的文字
public function setText(str:String):void {
myText.htmlText = str;
}
private function onFrameHand(e:Event):void {
tx = stage.mouseX+10;
ty = stage.mouseY+10;
//trace(mouseX);
if ((tx + this.width)>stage.stageWidth) {
tx = stage.mouseX – this.width – 10;
}
if ((ty + this.height)>400) {
ty = stage.mouseY – this.height – 10;
}
this. x = tx;
this. y = ty;
}
}
}然后新建一个clew_info.fla ,建立两个元件:hitObj和hitObj2,在帧上写代码:
import tips;
var box:tips = new tips();
addChild(box);hitObj.addEventListener(MouseEvent.MOUSE_OVER , onOverHand);
hitObj.addEventListener(MouseEvent.MOUSE_OUT , onOutHand);
function onOverHand(e:MouseEvent):void{
box.setText(”你好呀,我也是现在才进来<b>玩这个游</b>戏的<br/><br/>你喜欢吗?”);
box.setWidth(150,60);
box.show();
}
function onOutHand(e:MouseEvent):void{
box.out();
}hitObj2.addEventListener(MouseEvent.MOUSE_OVER , onOverHand2);
hitObj2.addEventListener(MouseEvent.MOUSE_OUT , onOutHand2);
function onOverHand2(e:MouseEvent):void{
box.setText(”第二个提示内容\n第二个提示内容消息”);
box.setWidth(100,60);
box.show();
}
function onOutHand2(e:MouseEvent):void{
box.out();
}就OK了。
box.setText(”"); box.setWidth(100,60); box.show(); box.out(); 都是tips这个类写好的方法。通过这样的方法,实现了逻辑与具体实现分开,传统OOP的做法。
下面是源文件:
提示框源文件 -
解决菜鸟遇到的textField文本,用textFormat改变不了的问题
今天遇到了一个TextFiled文本改变字体颜色与大小时的可笑问题.
1.我创建一个TextField文本,代码如下:
import flash.text.TextField;
var label:TextField = new TextField();
label.htmlText = “Hello World…\nHellow”;2.我想用一个TextFormat使文本的颜色改变,代码如下:
import flash.text.TextFormat;
var labelCss:TextFormat = new TextFormat();
labelCss.color = 0xff0000;
labelCss.leading = 5;
labelCss.font = “Verdana”;3.最后我把TextFormat赋给TextField,但我看开发文档时直接使用了Textfield的setTextFormat方法,代码如下:
label.setTextFormat(labelCss);结果label一点反应都没有,后来再看flash手册,看到其中的”defaultTextFormat”属性,原来这个属性才是使用TextFormat的正确方法,
于是把代码修改成:
label.defaultTextFormat = labelCss;
若在使用setTextFormat方法,必须放在label.htmlText=”XXXXXXXX”这句的后面。就OK了.这种错误在写AS代码时经常范,flash在这方面也没有一个统一的规范,觉得有点凌乱.最后给出全部代码.
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;public class styleSheet extends Sprite {
public function styleSheet() {
var labelCss:TextFormat = new TextFormat();
labelCss.color = 0xff0000;
labelCss.leading = 5;
labelCss.font = “Verdana”;
var label:TextField = new TextField();
label.defaultTextFormat = labelCss;
label.htmlText = “<body><span class=’heading’>Hello </span>World…\nHellow</body>”;
addChild(label);
}
}
}


