1

我們正在使用ActionScript 3.0通過Flash 5.5製作一款適用於手機的簡單Flash遊戲。我們垂直對齊一組對象,直到它們碰到舞臺頂部的另一個對象。我們用10個MovieClip動畫之一實例化數組中的每個元素。每個對象都有兩個事件監聽器;一個用於垂直動畫,另一個用於聽取鼠標點擊(將對象從舞臺上移除)。當一次有超過10個物體在舞臺上時,我們遇到了一個問題。問題是這些物體偶爾消失,沒有解釋。我們假設問題是由於某種類型的內存/垃圾收集問題。下面是我們代碼的一個小例子,它將MovieClip實例分派到舞臺上。AS3 - 舞臺上的物品無意中消失

function dispatch(e:TimerEvent):void{ 
     if(count < srrayFinal.length) 
     { 
      addChild(sArrayFinal[count]); 
      sArrayFinal[count].x = randomNumberXtart(); 
      sArrayFinal[count].addEventListener(Event.ENTER_FRAME, fl_AnimateVertically, false, 0, true); 
      sArrayFinal[count].addEventListener(MouseEvent.CLICK, taphandler, false, 0, true); 
      sArrayFinal[count].y = 480; 
      count++; 
     } 
     else 
     { 
      timer.stop(); 
      timer.removeEventListener(TimerEvent.TIMER, dispatch); 
      timer = null; 
     } 
    } 

爲了讓影片剪輯不會消失,我們可以做些什麼? 謝謝!

+0

你沒有在這段代碼中顯示任何東西。你可以請更新並顯示更多的代碼,例如ENTER_FRAME和CLICK事件的回調,以及生成movieclip並放入數組的代碼。 – 2011-06-04 11:11:39

+2

我認爲這個問題不是垃圾回收問題,當你在可視化樹上有一個DisplayObject(通過'addChild')時,它不會被收集。 – dain 2011-06-04 12:56:26

+0

是否有機會將動畫片段添加到已在舞臺上的舞臺上?當發生這種情況時,動畫片段似乎消失並重新出現。只是一個想法。 – Ian 2011-06-04 16:53:29

回答

1

我沒有看到任何地方的對象實例化的代碼。相反,我看到已經實例化的對象被移動到位。我猜測發生的事情是,你只有10個實例初始化的對象,所以當你試圖派發一個「新」的實體時,你實際上正在做的是將一個現有的對象從中間的任何地方移動的舞臺,並將其放回原點。

+0

謝謝你的回答。我明白你的意思是圍繞一個對象移動而不是創建新對象。現在,這將我們帶入了我們真正的問題,一般來說,人們如何從庫中獲取符號並在代碼中創建它的副本?我們正在處理大量實例和只有10個對象,那麼我們如何纔能有效地「派發新對象」的相同符號?此外,我們如何擺脫他們的新水平?再一次,非常感謝,這當然是我們短視的主要原因。 – Raddfood 2011-06-04 20:27:12

+0

庫中的影片剪輯必須鏈接到代碼。然後在代碼中使用「new」關鍵字來實例化副本。 – jhocking 2011-06-04 20:45:08

+0

jocking你是絕對正確的。當我們試圖派發一個已經在屏幕上的類型的新對象時,屏幕上的對象消失並且重新定位在屏幕的底部。這是因爲我們不止一次地引用了對象的實例化。非常感謝! – Raddfood 2011-06-05 00:20:32

1

我一直在學習AS3,或多或少地具有3D功能的裂縫........ 任何方式我創建了一個視覺上體面的3D旋轉筆記本

您可以在這裏WWW查看.parelle.com.au

我的問題是圖形消失一旦某些視覺效果/動畫發生,例如,如果你檢查網站鏈接上方的鍵盤和屏幕是另一個身體(電影剪輯)中包含的單獨的電影剪輯屏幕是動畫的鍵盤不是,所以在10秒左右後,屏幕或某些部分會消失,直到鼠標移動或已經被渲染的東西

我簡單的解決方法是使隱藏的動畫與電影片段連續播放,保持閃光燈忙碌渲染MC保持在屏幕上

的一切,我想我會添加到出任這個bug激怒了地獄的我,我搜索和搜索,,,但是,如果你有同樣的問題,我希望這可以爲你修復它