看板 Flash 關於我們 聯絡資訊
想請問一下版上個位高手一些關於 Function 中物件的問題 還有 Sprite 的問題 我現在在練習寫遊戲!! 當中會有一個商店 ~ 假設商店當中有十個商品 (因為商品當中有圖與資料所以我用Sprite包裝) 但是畫面中只能顯示兩個 所以我是寫了一個 Function ListShow 去創造商品資訊並且傳回到預設的 Sprite 同時這 function 還要負責刷新商品資訊 (當使用者呼叫下一頁的資訊的時候) 程式的片段在下面 我的問題是 在 ListShow 關於 renew 的程式碼似乎沒有作用? 如果我用 Container1 = ListShow(Container1, SpriteIndex, 0); 由於資料會寫回來原本的容器 畫面上的東西會更新 如果我用 ListShow(Container1, SpriteIndex, 1); Container1 的話面不會消失 所以表示我 renew 的部份沒效? 那我到底要怎麼寫 才可以將 Container1 從畫面中清除 同時從記憶體中清除 還請版上先進指導 ~ var Container1 function CallShop(me:MouseEvent) { // 創造商品資訊的 Function ListShow Container1 = ListShow(Container1, SpriteIndex, 0); } function ListShow(Bcontainer:Sprite, Sindex:int, renew:int = 0) { if (renew == 1) { Bcontainer.removeEventListener(MouseEvent.CLICK, FunctionX); stage.removeChild(Bcontainer); Bcontainer = null; } Bcontainer = new Sprite; Bcontainer.addEventListener(MouseEvent.CLICK, FunctionX); stage.addChild(Bcontainer); stage.setChildIndex(RL_btn, stage.numChildren -1); //trace(Bcontainer.name); return Bcontainer; } -- 要看著前方前進 要是往旁邊或是往下方看的話 便會忌妒... 害怕... 看著前方的人 注視著群星的人... STARGAZER 觀星者... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.122.216
cjcat2266:Flash Player使用garbage collector記憶體 03/30 12:05
cjcat2266:一般是無法直接"命令"garbage collector清除記憶體的 03/30 12:05
cjcat2266:當有需要記憶體,GC自然會去把沒用的物件清除掉 03/30 12:06
STARGAZERs:所以說他一切都自動@@" 03/30 12:25
STARGAZERs:那我在 renew 那段程式碼當中做 removeChild 沒效 03/30 12:30
STARGAZERs:又是甚麼原因阿@@" 03/30 12:30
cjcat2266:你要確定BContainer是先前addChild()在stage之下才行 03/30 13:17
STARGAZERs:我還挺確定的 因為 addChild 是在倒數第三行... 03/30 13:59
STARGAZERs:說錯 是倒數第四行 我是希望把顯示 刪除 都放在 03/30 14:00
STARGAZERs:同一個 function 當中@@“ 03/30 14:00
cjcat2266:那你怎麼先removeChild()才addChild()呢? 03/30 14:42
aquarianboy:當你的renew == 1的時候,會先做removeChild的動作 03/30 14:44
aquarianboy:這時候不會發生錯誤訊息嗎? 03/30 14:44
用修文來回答 ~ 我做 removeChild 不會有錯誤訊息!! 我有想過是不是 Function 內的 Bcontainer:Sprite 只是繼承了外部 conatiner1 的一切的副本 可是我可以取消監聽 卻不能移除他 這點好奇怪喔... ※ 編輯: STARGAZERs 來自: 114.43.122.216 (03/30 16:23)
emily114005:renew==1時,removeChild做完又會再做一次addChild喔 03/30 16:22
STARGAZERs:是沒錯阿 可是重新 addchild 前我有把他變成空的阿 03/30 16:23
STARGAZERs:removeChild 後面的 = null 03/30 16:26
STARGAZERs:或是 Bcontainer = new sprite; 03/30 16:26
STARGAZERs:Orz 我單獨把這段 renew 拉出來就不能用了 03/30 17:06
STARGAZERs:會 Error... 請問哪位高手能提供一下正確的寫法嗎 03/30 17:08
STARGAZERs:找到問題點了... removeChild 的寫法是... 03/30 17:10
STARGAZERs:removeChild(); 而不是 stage.removeChild(); 03/30 17:10