作者Jerrynet (我爱Hot_game板)
看板Flash
标题Re: [问题] 有什麽方法可以加快计算的效能呢?
时间Tue Jan 29 11:52:26 2008
※ 引述《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
1F:推 kazenol:唉呀,您的写法让我想到map用的地图编号,好像有办法解决 01/29 13:53