About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jan

    31

    常用键值表

    • 0 Comments
    • Miscellaneous

    FLASH常用工具键盘键值表。

    Jan

    28

    自定义让数组元素从长至短(不是从大至小)的顺序排列。

    var _array:Array = new Array("a", "abc", "abcdefg", "ab", "h", "c", "bc", "dc");
    _array.sort(sortLength);
    trace(_array);//abcdefg,abc,ab,dc,bc,a,c,h
    function sortLength(_length1, _length2) {
        return _length2.length-_length1.length;
    }

     

    Jan

    27

    在蓝色理想看到一网友为了便于阅读,将一行过长的文本字符串使用了硬回车换行的方式后出现错误,所咨询的。其在AS中是对字符串是不能进行硬回车换行的,只能在字符串过长时它自动换行。如果一定要换行,可以使用“+”号换行的方法。这在很多书上好像没有指出过这种“+”号的使用方法,应该算是它的特殊用法,既实现了换行,又连接了字符串。

    //这里是错误的使用方法
    my_txt = "当一行文本过长的时候,
              请不要使用硬回车换行,
              而是需要使用+连接。"
    ;
    trace(my_txt);

     

    //正确的使用方法
    my_txt = "当一行文本过长的时候,"
            +"请不要使用硬回车换行,"
            +"而是需要使用+连接。";
    trace(my_txt);

     

    Jan

    27

    var _array:Array = new Array("a", "abc", "abcdefg", "ab", "h", "c", "bc", "dc");
    var char_array = _array.join("").split("");
    var len:Number = char_array.length;
    while (len--) {
        if (char_array.join("").split(char_array[len]).length>2) {
            char_array.splice(len,1);
        }
    }
    trace(char_array);//a,b,c,d,e,f,g,h

     

    Jan

    22

    var _array:Array = new Array();
    //任意数组
    _array = ["a", "abc", "abcdefg", "ab", "h", "c","bc","dc"];
    //循环历遍对比元素本身是否包含了其它元素
    for (var k:Number = 0; k<_array.length; k++) {
        for (var j:Number = 0; j<_array.length; j++) {
            if (_array[j].indexOf(_array[k])>=0) {
                if (j != k) {
                    _array[k] = "";
                }
            }
        }
    }
    trace(_array);
    //删除所有空元素
    var temp_array:Array = new Array();
    for (var k:Number = 0; k<_array.length; k++) {
        if (_array[k] != "") {
            temp_array.push(_array[k]);
        }
    }
    _array = temp_array;
    delete temp_array;
    trace(_array);

     

     

    Jan

    22

    在AS3中新增了 numLines 属性,可以方便的限制输入文本的行数。

    但在AS2以前并没有这个属性,只有限制字符数量的属性。要想限制输入文本的行数,就必须自己算。原理:如果输的文字行数所形成的区域高度大于文本框那么就限制输入(包括复制和粘贴的文字,要截断超出部份的文字)。

    var txt_height = 100;//文本框高度
    this.createTextField("my_txt",1,100,100,100,txt_height);
    my_txt.type = "input";
    my_txt.multiline = true;
    my_txt.wordWrap = true;
    my_txt.border = true;
    my_txt.setNewTextFormat(my_fmt);
    my_txt.onChanged = function() {
        //主要是为截断复制的文字
        var i = Math.floor(txt_height/(my_txt.textHeight));
        while (i<=0) {
            my_txt.text = my_txt.text.substring(0, my_txt.text.length-1);
            i = Math.floor(txt_height/(my_txt.textHeight));
        }
    };

    这里提供的是最基本的也是默认值的计算,如果自定了行间距,字号大小等等,那么代码需要再扩展,将字号和行间距也算入在内。
     

    Jan

    20

    [AS1/2]界面框简单拖曳缩放

    • 0 Comments
    • Flash Platform

    在一些界面设计上,自适应功能和自定义的功能各有所用,但有时候也需要使用到一些未知情况。

    this.createEmptyMovieClip("scalemc",this.getNextHighestDepth());
    scalemc.beginFill(0x000000);
    scalemc.lineTo(0,10);
    scalemc.lineTo(10,10);
    scalemc.lineTo(10,0);
    scalemc.lineTo(0,0);
    scalemc.endFill();
    this.createEmptyMovieClip("dragmc",this.getNextHighestDepth());
    dragmc._alpha = 0;
    dragmc.beginFill(0xFF0000);
    dragmc.moveTo(0,-10);
    dragmc.lineTo(0,0);
    dragmc.lineTo(-10,0);
    dragmc.lineTo(0,-10);
    dragmc.endFill();
    dragmc._x = 10;
    dragmc._y = 10;
    duplicateMovieClip("dragmc", "dragmcShow", this.getNextHighestDepth());
    dragmcShow._alpha = 100;
    dragmc.cacheAsBitmap = true;
    dragmcShow.cacheAsBitmap = true;
    var mouseListener:Object = new Object();
    dragmc.onPress = function() {
        mouseListener.onMouseMove = function() {
            scalemc._width = dragmc._x;
            scalemc._height = dragmc._y;
            dragmcShow._x = dragmc._x;
            dragmcShow._y = dragmc._y;
            updateAfterEvent();
        };
        Mouse.addListener(mouseListener);
        dragmc.startDrag(false,dragmc._width,dragmc._height,750,550);
    };
    dragmc.onRelease = dragmc.onReleaseOutside=function () {
        scalemc._width = dragmc._x;
        scalemc._height = dragmc._y;
        dragmcShow._x = dragmc._x;
        dragmcShow._y = dragmc._y;
        dragmc.stopDrag();
        Mouse.removeListener(mouseListener);
    };

     

    Jan

    15

    很多开发类语言中有相应的类,但在AS中并没有这样的相关的类或函数可以直接调用,所以需要自己来编写一个。虽然非常简单,但非常实用:

    //文本框提示函数
    function tips(string:String) {
        this.createEmptyMovieClip("tips_mc",this.getNextHighestDepth());
        tips_mc._x = _xmouse;
        tips_mc._y = _ymouse;
        tips_mc.createTextField("tips_txt",this.getNextHighestDepth(),14,0,0,18);
        tips_mc.tips_txt.border = true;
        tips_mc.tips_txt.autoSize = false;
        tips_mc.tips_txt.selectable = false;
        tips_mc.tips_txt.type = "dynamic";
        tips_mc.tips_txt.background = true;
        tips_mc.tips_txt.backgroundColor = 0xFFFFE1;
        tips_mc.tips_txt.text = " "+string+" ";
        tips_mc.tips_txt.autoSize = "left";
    }
    //演示使用
    function createRectangle(width:Number, height:Number, color:Number):MovieClip {
        var depth:Number = this.getNextHighestDepth();
        var mc:MovieClip = this.createEmptyMovieClip("mc_"+depth, depth);
        mc.beginFill(color);
        mc.lineTo(0,height);
        mc.lineTo(width,height);
        mc.lineTo(width,0);
        mc.lineTo(0,0);
        return mc;
    }
    var _mc:MovieClip = createRectangle(200, 100, 0xFF0000);
    _mc.onRollOver = function() {
        tips("残象网");
        tips_mc.startDrag();//需要跟随鼠标移动,不添加则不移动。
    };
    _mc.onRollOut = function() {
        tips_mc.removeMovieClip();
    };

     

    Jan

    9

    由于FLASH播放器对本地文件系统安全限制,所以单独使用FLASH播放器目前是无法历遍本地文件夹中所有文件与子文件夹中的文件的,需要结合第三方软件才可以。以下是FLASH结合第三方软件SWFKIT实现的方法。
     

    //参数path为某文件夹路径,转义字符“\”需要写成“\\”
    function allFoldersAndFiles(path) {
        var folder = new Folder(path);
        var folders = folder.subFolders;
        if (folders.length>0) {
            for (var j = 0; j<folders.length; j++) {
                trace((new Folder(folders[j])).name+"\n");
                allFoldersAndFiles(folders[j]);
            }
        }
        var files = folder.files();
        if (files.length>0) {
            for (var j = 0; j<files.length; j++) {
                trace((new File(files[j])).name+"\n");
            }
        }
    }

    应用举例:可以扩展成搜索本地文件的功能。

     

    Jan

    7

    二类涂鸦板:一种是主流的通过保存鼠标轨迹的方式来保存涂鸦数据,既使用矢量的方式来保存,样例如闪吧的涂鸦程序;另一种是通过保存 BitmapData 颜色值的方式来保存,样例还没有找到比较像样的样例。

    在《内置方法Array.shift 与自定义循环++的执行效率比较》一文中,我已经对 shift 方法与自定义的 ++ 方式分别作了比较。虽然自定义 ++ 的方式比内置的 shift 方法要快,但事实它们二者的效率都很低。由于 SharedObject 类是无法直接保存 BitmapData 对象的,所以只能将 BitmapData 的所有位图像素的每一个像素取 ARGB 值后保存。一张位图按500像素 x 500像素算,自定义 ++ 需要3秒多,而 shit 方法脚本超时。所以通过 BitmapData 的颜色方式来保存只能保存较小的位图。所以通过鼠标轨迹的方式保存涂鸦成了主流。

    More...