有关flash , javascript 的一些小心得
RSS icon Email icon Home icon
  • 用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);
            }
        }
    }