2014-11-08 66 views
1

所以我有很多幀,並且在一個幀中我有一個帶以下代碼的動畫片段: 它增加了一個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

回答

0

要啓動硬件加速您的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