作者STARGAZERs (星之影)
看板Flash
標題[問題] 關於 Sprite 與記憶體清除的問題
時間Tue Mar 30 11:48:14 2010
想請問一下版上個位高手一些關於 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
1F:推 cjcat2266:Flash Player使用garbage collector記憶體 03/30 12:05
2F:→ cjcat2266:一般是無法直接"命令"garbage collector清除記憶體的 03/30 12:05
3F:→ cjcat2266:當有需要記憶體,GC自然會去把沒用的物件清除掉 03/30 12:06
4F:→ STARGAZERs:所以說他一切都自動@@" 03/30 12:25
5F:→ STARGAZERs:那我在 renew 那段程式碼當中做 removeChild 沒效 03/30 12:30
6F:→ STARGAZERs:又是甚麼原因阿@@" 03/30 12:30
7F:推 cjcat2266:你要確定BContainer是先前addChild()在stage之下才行 03/30 13:17
8F:→ STARGAZERs:我還挺確定的 因為 addChild 是在倒數第三行... 03/30 13:59
9F:→ STARGAZERs:說錯 是倒數第四行 我是希望把顯示 刪除 都放在 03/30 14:00
10F:→ STARGAZERs:同一個 function 當中@@“ 03/30 14:00
11F:推 cjcat2266:那你怎麼先removeChild()才addChild()呢? 03/30 14:42
12F:→ aquarianboy:當你的renew == 1的時候,會先做removeChild的動作 03/30 14:44
13F:→ aquarianboy:這時候不會發生錯誤訊息嗎? 03/30 14:44
用修文來回答 ~
我做 removeChild 不會有錯誤訊息!!
我有想過是不是 Function 內的 Bcontainer:Sprite
只是繼承了外部 conatiner1 的一切的副本
可是我可以取消監聽 卻不能移除他 這點好奇怪喔...
※ 編輯: STARGAZERs 來自: 114.43.122.216 (03/30 16:23)
14F:推 emily114005:renew==1時,removeChild做完又會再做一次addChild喔 03/30 16:22
15F:→ STARGAZERs:是沒錯阿 可是重新 addchild 前我有把他變成空的阿 03/30 16:23
16F:→ STARGAZERs:removeChild 後面的 = null 03/30 16:26
17F:→ STARGAZERs:或是 Bcontainer = new sprite; 03/30 16:26
18F:→ STARGAZERs:Orz 我單獨把這段 renew 拉出來就不能用了 03/30 17:06
19F:→ STARGAZERs:會 Error... 請問哪位高手能提供一下正確的寫法嗎 03/30 17:08
20F:→ STARGAZERs:找到問題點了... removeChild 的寫法是... 03/30 17:10
21F:→ STARGAZERs:removeChild(); 而不是 stage.removeChild(); 03/30 17:10