ActionScript 3重复点击会减慢程序的速度

问题描述:

所以我有很多帧,并且在一个帧中我有一个带以下代码的动画片段: 它增加了一个Shape来绘制一些生物细胞,当某个特定按下名为'测试'的movieclip。 'morphogen1',...是可以拖动的其他影片剪辑。ActionScript 3重复点击会减慢程序的速度

cells = new Shape() 
this.addChild(cells) 
this.setChildIndex(cells,1) 

function drawcell(xx,yy){ 
    if(logic(xx,yy)){col=0xFF4444}else{col=0xFFBBBB} 
    with(cells.graphics){ 
    beginFill(col) 
    drawCircle(xx,yy,5) 
    endFill() 
    } 
} 

function drawcells(){ 
    for(i=0;i<=15;i++){ 
     for(j=0;j<=10;j++){ 
      drawcell(i*22,j*14) 
     } 
    } 
} 

function dist(x1,y1,x2,y2){ 
    return Math.exp(-((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))/50000) 
} 

function logic(xx,yy){ 
    va = dist(xx,yy,morphogen1.x,morphogen1.y) 
    vb = dist(xx,yy,morphogen2.x,morphogen2.y) 
    vc = dist(xx,yy,morphogen3.x,morphogen3.y) 
    if(ctrl==1){sa=(va>0.5)}else{sa=(va<vb)} 
    return sa&&(vb>0.5)&&(vc>0.5) 
} 

test.addEventListener(MouseEvent.CLICK, swap) 

function swap(e:MouseEvent){ 
    ctrl = 1-ctrl 
    drawcells() 
} 

它按预期工作,但点击“测试”越多,程序越慢;通过30次点击,滞后非常明显。

我是一个业余程序员 - 可能我犯了一些主要的nono;事件监听器是否堵塞了cpu?我试过用简单得多的东西去除Math.exp函数,但同样的问题。

+0

尝试用激活硬件加速。 – akmozo 2014-11-08 20:31:00

+0

你是怎么做到的?这是在Flash或Windows中的一些设置? – Chrystomath 2014-11-09 08:41:59

+0

我给出了答案。 – akmozo 2014-11-09 10:06:56

要启动硬件加速您的SWF文件,去文件>发布设置...或者干脆CTRL(WIN)/ Cmd的(MAC)+ + F12,你会得到这个窗口,并在底部选择了硬件加速:

SWF Publish Settings

+0

谢谢你的建议。我已经尝试了更多。问题不在于速度;即使您在点击之间留下大量时间,下一次点击仍然会滞后一秒左右。 – Chrystomath 2014-11-09 15:16:38

+0

我认为这是一个内存泄漏问题,在这种情况下,您可以在绘制单元之前使用'cells.graphics.clear()'清除'cells.graphics'。 – akmozo 2014-11-09 17:55:27

+0

工作正常!你是一个拯救生命的人。抱歉,我没有足够的声望投票回答! – Chrystomath 2014-11-09 20:19:27