Re: [問題] 有什麼方法可以加快計算的效能呢?

看板Flash作者 (我愛Hot_game板)時間16年前 (2008/01/29 11:52), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《kazenol (隨便啦)》之銘言: : 我寫了一個script,將一個10x10的正方形Mc,複製2000個以後鋪滿螢幕 : ,當滑鼠按一下後,距離滑鼠位置50pix以內的正方形都會消失掉 : _root.onMouseUp = function() { : for (i=0; i<2000; i++) { : if (Math.abs(_root["cc"+i]._x-_root._xmouse)<50 and : Math.abs(_root["cc"+i]._y-_root._ymouse)<50) { : _root["cc"+i]._visible=false : } : } : }; : 有兩個問題,第一個:mc的複製數目好像有上限,不能超過2000 : 第二個,運算一次非常的慢。不知道有沒有好一點的寫法,好像怎麼寫,都得 : 一次計算完2000個mc與mouse的位移... 不知道你原本是先橫排還是直排 如果是我的話,複製的元件名稱我會取 "cc"+i+"_"+j 這樣可以判斷這是第幾排第幾列的方塊,方便我等一下的判斷 或是你在複製元件時可以一併弄一個二維陣列紀錄元件名稱 你先計算滑鼠位置是在第幾個正方形上 ex: dx = Math.floor(_root._xmouse/10); //假設你的方塊是從(0,0)開始排 dy = Math.floor(_root._ymouse/10); 又50pix = 5個方塊 所以 (我不想再回圈內判斷,這樣效率會差一點) lt=dx-5; rt=dx+5; up=dy-5; dn=dy+5; if (it < 0) lt=0; if (rt > 50) rt=50; //我不知道你橫排是幾個方塊,這裡隨便寫的XD if (up < 0) up=0; if (dn > 40) dn=40; //我不知道你直排是幾個方塊,這裡隨便寫的XD for (i=lt;i<=rt;i++){ for (j=up;j<=dn;j++){ //這裡是先直排,請依照你排方塊順序改變 _root["cc"+i+"_"+j].visible = false; } } 這樣迴圈最多只跑11*11次就結束了 (因為左右各5,加上滑鼠正下方那一個,共11;直的也是) 另一種方法是用遞回的,可以從滑鼠中心向外擴散開始消失,不推薦這種方法,因為速度會 慢一點 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.113.61

01/29 13:53, , 1F
唉呀,您的寫法讓我想到map用的地圖編號,好像有辦法解決
01/29 13:53, 1F
文章代碼(AID): #17dgByn0 (Flash)
文章代碼(AID): #17dgByn0 (Flash)