我製作了一個Flash遊戲,您可以在其中駕駛飛機,並且必須抓住圈子並避免使用降落傘和其他東西。下面是遊戲的畫面讓你瞭解什麼即時通訊談論:Flash遊戲中的小孩的內存問題
,我有是內存使用,因爲我想將它移植到空氣iphone的問題。當菜單中沒有問題時,應用程序使用大約40 MB。但是當我在玩記憶時,就像箭頭一樣。我拍了一張Monster Debugger圖形的屏幕。那就是:
的事情是,我有各種類是從天上掉下來的每個元素。降落傘,衝浪者,圈子和獎金。他們都很相似,所以我只會複製這樣的降落傘類:
package {
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.*;
import ascb.util.NumberUtilities;
import myGlobal;
import flash.geom.*;
import com.demonsters.debugger.MonsterDebugger;
public class paracaidistasClass extends MovieClip {
private var n:Number = 0;
private var _rotacionDelAvion:int = 1;
private var temporizador:Timer=new Timer(myGlobal.paracaidistasTemporizador[myGlobal.nivel - 1],0);
public function paracaidistasClass() {
// constructor code
temporizador.start();
temporizador.addEventListener(TimerEvent.TIMER, emisor);
addEventListener(Event.ENTER_FRAME, altura);
}
private function altura(e:Event):void{
if (myGlobal.detener == false){
this.y = this.y - myGlobal.altura;
}
}
private function emisor(e:TimerEvent){
if (myGlobal.detener == false){
temporizador.delay = NumberUtilities.random(myGlobal.paracaidistasMinimoDelay[myGlobal.nivel - 1], myGlobal.paracaidistasMaximoDelay[myGlobal.nivel - 1]);
var paracaidista = new paracaidistaClass;
this.addChildAt(paracaidista, 0);
paracaidista.y = NumberUtilities.random(-350,50);
myGlobal.cantidadDeParacaidistas = this.numChildren;
addEventListener(Event.ENTER_FRAME, movimiento);
}
}
private function movimiento(event:Event):void{
if (myGlobal.detener == false){
for (var i:Number=0; i<this.numChildren;i++){
getChildAt(i).x = getChildAt(i).x - (myGlobal.velocidad - (pasarAPositivo(myGlobal.rotationDelAvion)/12));
getChildAt(i).x = getChildAt(i).x - 1;
if (getChildAt(i).localToGlobal(new Point(stage.x,0)).x < -200){
removeChildAt(i);
myGlobal.cantidadDeParacaidistas = this.numChildren;
}
}
}
//delete all parachutes
if (myGlobal.reiniciar == true){
for (var d:Number=0; d<this.numChildren;d++){
removeChildAt(d);
myGlobal.cantidadDeParacaidistas = this.numChildren;
}
}
}
private function pasarAPositivo(value:int):int{
var _rotacionPositiva:int;
_rotacionPositiva = value;
if (_rotacionPositiva < 0){
_rotacionPositiva = _rotacionPositiva * -1;
}
return _rotacionPositiva;
}
}
}
好吧。你可以看到我刪除了不在舞臺上或降落的降落傘,因此內存使用應該穩定在某些點上。我也檢查,我從來沒有通過降落傘的3,4個孩子。所以,我不明白爲什麼只有當y刪除整個級別的內存下降,以及爲什麼它不穩定,並保持增長時,當我刪除我不使用的孩子。我希望你已經清楚了,並且有人知道這個問題是什麼。提前致謝。
是的,這看起來像是怎麼回事。他們多次添加相同的事件監聽器,以便函數每次運行多次(隨着時間的推移,這個數字變得相當大,我打賭)。要麼只添加一次,要麼在處理程序的第一行刪除它。問題應該解決。 –
他提到,這是幾個類似的課程之一 - 毫無疑問事情會增加。 – Gone3d
我解決了這個問題,性能稍微好一些,但我仍然有問題。我猜測可能是什麼問題,並且我認爲它與事件監聽器有關,這要感謝您指出我的代碼。我有個問題;當我刪除在其構造函數中添加事件偵聽器的類的子項時,事件偵聽器隨着子項消失或停留? –