WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院图形图像Flash Think in ActionScript 3.0Ⅲ 阅读

Think in ActionScript 3.0Ⅲ

 2009-05-30 12:07:59 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫嶅銈嗗姉閸樠囧煡婢跺á鐔兼煥鐎n兘鍋撴繝姘拺鐟滅増甯掓禍浼存煕閹惧鈽夐柍缁樻煥椤繈鎳滅喊妯诲闂備礁鎲$粙鎴︺偑閺夋垟鏋旈柡鍐e亾缂佺粯绋撴禒锕傚磼濮橆剦鐎抽梻浣哥-缁垶骞戦崶顒傚祦閻庯綆浜栭弨浠嬫煙闁箑澧い鏂垮€规穱濠囨倷椤忓嫧鍋撻弽褜娼栧┑鐘宠壘閸屻劎鎲歌箛娑樼疅闁圭虎鍠楅弲鎼佹煥閻曞倹瀚�
核心提示: 接下来定义三个变量分别表示圈内还剩多少人,所报的数是多少和数组下标,Think in ActionScript 3.0Ⅲ(4),下面 while 循环开始,只有圈内还有人(leftCount > 0)就进行循环,通过本节请大家认真体会面向对象的设计思想,一次学会,首先判断当前 in

接下来定义三个变量分别表示圈内还剩多少人,所报的数是多少和数组下标。

   下面 while 循环开始,只有圈内还有人(leftCount > 0)就进行循环,首先判断当前 index 所指的元素是否为真,如果是则报数加 1,再判断是不是加到 3 了,如果是则打印出当前的数组下标,再将该元素设为 false,剩余人数减1,下一次从新开始报数。

最后让数组下标加 1,当指到最后时,将数组下标置为 0,因为这是一个圈,要用循环的数组来表示。

8.4.3 出圈游戏 —— 面向对象(cirgame/ CircleGame2.as)

回顾上一个例子,在面向过程的程序中,明明是围成的一个圈儿,却要看成是一个数组;明明是一个个小孩儿却要看成是数组的一个个元素。这不就是为了让计算机看懂吗?但是,面向对象是更加接近人类的思维模式,我们在现实中看到的就是一个个小孩儿,怎么能说是数组?那么这一个个小孩儿就是一个个对象,他们都是 Kid。围成的这个圈,就是一个 KidCircle。很自然吧,比大自然还自然!下面来体会面向对象的设计思想:

package cirgame {
    public class CircleGame2 {
        public function CircleGame2() {
            var kc:KidCircle = new KidCircle(5);
            var countNum:int = 0;
            var k:Kid = kc.head;
           
            while (kc.count > 0) {
                countNum++;
                if (countNum == 3) {
                    trace(k.id + 1);
                    kc.remove(k);
                    countNum = 0;
                }
                k = k.right;
            }
           
        }
    }
}

// 每个 Kid 都有自己的 id,并且左右手还拉着其它的 Kid
class Kid {
    var id:uint;
    var left:Kid;
    var right:Kid;
}

// 这个圈子里可以加入或移除一些 Kid
class KidCircle {
    var count:uint = 0;
    var head:Kid;
    var rear:Kid;
   
    function KidCircle(n:uint) {
        for (var i = 0; i < n; i++) {
            var kid:Kid = new Kid();
            add(kid);
        }
    }
   
    function add(kid:Kid):void {
        kid.id = count;
        if (count == 0) {
            head = kid;
            rear = kid;
            kid.left = kid;
            kid.right = kid;
        } else {
            rear.right = kid;
            kid.left = rear;
            kid.right = head;
            head.left = kid;
            rear = kid;
        }
        count++;
    }
   
    function remove(kid:Kid):void {
        if (count <= 0) {
            return;
        } else if (count == 1) {
            head = rear = null;
        } else {
            kid.left.right = kid.right;
            kid.right.left = kid.left;
            if (kid == head) {
                head = kid.right;
            } else if (kid == rear) {
                rear = kid.left;
            }
        }
        count--;
    }
}

   这段程序中设计了两个类,代表两类客观事物 —— 小孩(Kid)和圈子(KidCircle)。从 8.4.1 的图中可以确切地看到。Kid 有三个属性:id 号、左手和右手,左手拉着一个 Kid,右手拉着一个 Kid,因此 left 和 right 存放两个 Kid 的引用。

下面是 KidCircle 类,代表围成的圈子,这个圈子可以加入或移除一些 Kid,因此有 add 和 remove 两个方法。head 和 rear 两个成员变量用于指向队首和队尾的两个 Kid,因为些添加的 Kid 要放在队尾(rear)的后面,因为这是一个圈子,所以还需要让队尾的小孩儿拉住队首(head)的小孩儿,因此需要保存这两个成员变量。

最后是测试类,主要的逻辑和前一个例子比较像,这里就不多解释了。

通过这个例子大家可以看出,我们无形之间就完成了一个数据结构 —— 双向循环链表。而前面面向过程的例子,实际上就是一个顺序的存储结构 —— 线性表。

后面,我会带大家写一个贪吃蛇的游戏,目的是学习面向对象编程的思想(并非该游戏本身),在贪吃蛇中我们就会运用到类似于单向链表的结构,如果双向链表掌握了,那么单向一定没问题。

通过本节请大家认真体会面向对象的设计思想。一次学会,终身受用。

上一页  1 2 3 4 

Tags:Think in ActionScript

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接