Re: [問題] 有什麼方法可以加快計算的效能呢?
※ 引述《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
01/29 13:53, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):