返回列表 回复 发帖

[原创]电脑任务栏功能模拟(上传有源代码)

在这里我就是用了图片跟文字的方式来解释我的思路的.但愿这个能对大家对FLASH编程的思路有所启发.
同时,也请大家先帮我测试一下.看会不会有什么BUG的出现.

[ 本帖最后由 steamlin 于 2006-10-17 09:14 编辑 ]
1.jpg
2.jpg
我就先不贴源文件了.我怕有什么BUG,到时...
所以就先传上影片.给大家测试测试,同时也可以大家先想一下这到底是怎么实现的.
过后一段时间,我会传上源代码的啊...


严重抗议..载完就走....也不留点声响的.

[ 本帖最后由 steamlin 于 2006-10-16 12:10 编辑 ]

456-2.swf (3.63 KB)

搞得那么幸苦.咋的没人顶呢?
辛苦了,谢谢!
好,有创意,顶,顶,还要顶
姐姐真了不起
看不大懂,等你把原文件发上来再仔细瞧瞧
左下加个开始按钮,另外上面的按钮能把文字一起覆盖会更好
原帖由 8765004 于 2006-10-16 20:22 发表
左下加个开始按钮,另外上面的按钮能把文字一起覆盖会更好
那上面的都只是一个大概的例子而已.
会去改善的.多谢....
[b]var positionArray:Array = new Array();
nums = 5;
for (j=1; j<nums; j++) {
        positionArray[j] = 0;
}
var len:Number = 80;
for (i=1; i<nums; i++) {
        _root["ss"+i]._x = -80;
        _root["ss"+i]._y = 380;
        _root["ss"+i].no = i;
        _root["ss"+i].pre = 0;
        _root["ss"+i].pos = 0;
        _root["ss"+i].nex = 0;
        _root["ss"+i].staut = false;
        _root["ss"+i].closebtn.onRelease = function() {
                this._parent.staut = false;
                this._parent._x = -80;
                pos = this._parent.pos;
                pre = this._parent.pre;
                if (pre == undefined) {
                        pre = 0;
                }
                if (nex == undefined) {
                        nex = 0;
                }
                nex = this._parent.nex;
                this._parent._x = -80;
                this._parent.staut = false;
                trace("被"+pos+"个的ss"+this._parent.no+"被点击了");
                trace("ss"+pre+"==="+"ss"+this._parent.no+"====ss"+nex);
                trace("hit ss.pre="+pre);
                if (pre>0) {
                        if (nex>0) {
                                //前有,后有
                                _root["ss"+pre].nex = nex;
                                //将前一个SS的NEX属性设置为点击SS的NEX的值.
                                _root["ss"+nex].pre = pre;
                                //将被点击的PRE属性值赋给后一个SS的PRE属性
                                _root["ss"+nex].pos = _root["ss"+nex].pos-1;
                                //将后一个SS向前推移一个位置.
                                _root["ss"+nex]._x = _root["ss"+nex]._x-80;
                                //设置后一个SS的X坐标.其实就是X坐标向前推80;
                                positionArray[pos] = positionArray[pos+1];
                                //由于被点击的SS会消失,那么,在它后面的SS都会向前推,所以在数组中存放的SS编号也是向前移
                                ////////////////////////////////////以下的一个FOR循环是来使在位于POS+2个位置上的SS向前移一个位置.
                                for (i=pos+2; i<nums+1; i++) {
                                        sno = positionArray[i];
                                        //先得到位于第POS+2个位子上的SS编号.其实就是得知是哪个SS是在POS+2的位子上.
                                        if (sno>0) {
                                                //如果SNO大于0,则说明了,是有SS在位置POS+2上的.
                                                _root["ss"+sno]._x = _root["ss"+sno]._x-80;
                                                _root["ss"+sno].pos = _root["ss"+sno].pos-1;
                                                //以上两个都是设置位于POS+2上的SS的属性
                                                positionArray[i-1] = positionArray[i];
                                                //这里是设置位置数组上的值.都是向前移
                                        } else {
                                                //如果SNO小于0,则是说明了,在第POS+2的位置上是没有SS的存在的.
                                                positionArray[i-1] = 0;
                                                //所以就是将第i-1个位置设置为空
                                        }
                                }
                                //////////////////////////////////////////////////
                        } else {
                                //前有,后无
                                _root["ss"+pre].nex = 0;
                                //因为被点击的SS的后面是没有的.所以只将前一个SS的NEX属性设置为0就行了.
                                positionArray[pos] = 0;
                                //被点击了SS在点击后是会消失的,由于它后面没有的SS的存在,所以就将这个位置设置为空
                        }
                } else {
                        //"前无后有"这个情况下只需设置后一个SS的PRE属性以及位置及运动;
                        if (nex>0) {
                                positionArray[pos] = positionArray[pos+1];
                                //将前一个位置上的SS编号移到这个被点击的位置上
                                _root["ss"+nex].pre = 0;
                                //将后一个SS的NEX属性设置为0
                                _root["ss"+nex].pos = _root["ss"+nex].pos-1;
                                _root["ss"+nex]._x = _root["ss"+nex]._x-80;
                                //将后一个的位置及X坐标都向前推移.
                                //////////////////////////////////////以下的一个FOR循环是来使在位于POS+2个位置上的SS向前移一个位置.解释同上
                                for (i=pos+2; i<nums+1; i++) {
                                        sno = positionArray[i];
                                        if (sno>0) {
                                                _root["ss"+sno]._x = _root["ss"+sno]._x-80;
                                                _root["ss"+sno].pos = _root["ss"+sno].pos-1;
                                                positionArray[i-1] = positionArray[i];
                                        } else {
                                                positionArray[i-1] = 0;
                                        }
                                }
                                ///////////////////////////////////////////
                        } else {
                                //前无,后无
                                positionArray[pos] = 0;
                                //当只有一个SS在任务栏的时侯,当被点击后.要将空上位置设置为空.
                                for (j=1; j<nums; j++) {
                                        trace("positionArray["+j+"]="+positionArray[j]);
                                        //= 0;
                                }
                        }
                }
        };
        ////////////////////////////
        _root["bb"+i].no = i;
        _root["bb"+i].btn.onRelease = function() {
                if (!_root["ss"+this._parent.no].staut) {
                        //当被点击的SS.staut为false时,那就是在场景外.可以让它显示了.否则就不做任何处理
                        _root["ss"+this._parent.no].staut = true;
                        //当这个SS被点击的后.这个的staut的属性值就应该设为true了.防止重复点击同一个
                        for (j=1; j<6; j++) {
                                //用这个FOR循环是来检测在任务栏中的哪个位置是空的,也就是positionArray数组的值为0
                                if (positionArray[j] == 0) {
                                        //一检测到哪个位置的值为0,则说明,这个j位置是空,那就可以把这个被点击SS放在这个j位置了
                                        positionArray[j] = this._parent.no;
                                        //将这个原本空的positionArray赋上了被点击SS的编号.则说明在这个第j个位置上在SS的存在了
                                        _root["ss"+this._parent.no].pos = j;
                                        //设置SS的pos属性,也就是记录SS在任务栏中的位置,
                                        _root["ss"+this._parent.no]._x = j*len;
                                        //设置它的X坐标了
                                        _root["ss"+this._parent.no].nex = 0;
                                        //每一个被点击出来的SS都是被放在任务栏的最后面.所以它的nex都是为0的.
                                        preno = positionArray[j-1];
                                        //将它前一个位置上(也就是第j-1)的SS编号记录起来
                                        if (preno>0) {
                                                //当preno大于0,则说明在它的前一个位置也就是第j-1个位置上是有SS的存在的
                                                _root["ss"+this._parent.no].pre = preno;
                                                //每一个被点击出来的SS,都要记录起放在它前面的那个SS(也就是第j-1个SS)的编号到底是什么.
                                                _root["ss"+preno].nex = this._parent.no;
                                                //在它前一个位置上的SS的nex属性就要设置了.因为在它前一个位置也就是第j-1个位置的后面有了SS的存在的.
                                        } else {
                                                //当preno小于0,则说明在它的前一个位置也就是第j-1个位置上根本就没有SS的存在的,则下面将它的pre属性设置为0
                                                _root["ss"+this._parent.no].pre = 0;
                                        }
                                        break;
                                }
                        }
                }
        };
}
//ss.staut状态,是显示还是隐藏(既是在场景外)
//ss.position记录当其状态为显示时,所在的位置
//ss.no为唯一编号.
//positionArray记录在任务栏中的哪个位置被占有了.
//ss.pre在任务栏显示的SS的前一个SS
//pre.nex在任务栏显示的SS的后一个SS[/b][color=Blue]Sample Text[/color]

[[i] 本帖最后由 steamlin 于 2006-10-17 09:13 编辑 [/i]]

456-2.fla (112 KB)

456-2.swf (3.69 KB)

看不懂呀
好好学习
原帖由 songxia 于 2006-10-17 10:11 发表
看不懂呀
好好学习
这个例子重要的不是语句.而是这个例子的思路啊.
相信都能看明白每一个语句的意义.就是不明白它的作用
所以搞明白了思路就好理解很多啦.
学习了
FLASH Everyday
强楼主辛苦了
返回列表