Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Flash游戏中儿童的记忆问题_Performance_Actionscript 3_Flash_Memory_Children - Fatal编程技术网

Performance Flash游戏中儿童的记忆问题

Performance Flash游戏中儿童的记忆问题,performance,actionscript-3,flash,memory,children,Performance,Actionscript 3,Flash,Memory,Children,我做了一个flash游戏,你驾驶飞机,你必须抓住圆圈,避开降落伞和其他东西。下面是一个游戏屏幕,让您了解我在说什么: 我遇到的问题是内存使用量,因为我想用air将其迁移到iphone。当im在菜单中时没有问题,应用程序使用大约40 mb。但是当我玩的时候,记忆像箭一样向上移动。我用屏幕截取了怪物调试器的图形。这是: 问题是,我对从天上掉下来的每个元素都有不同的类。为了降落伞,为了冲浪者,为了圈圈和奖金。它们都非常相似,所以我只复制降落伞类,如下所示: package { impo

我做了一个flash游戏,你驾驶飞机,你必须抓住圆圈,避开降落伞和其他东西。下面是一个游戏屏幕,让您了解我在说什么:

我遇到的问题是内存使用量,因为我想用air将其迁移到iphone。当im在菜单中时没有问题,应用程序使用大约40 mb。但是当我玩的时候,记忆像箭一样向上移动。我用屏幕截取了怪物调试器的图形。这是:

问题是,我对从天上掉下来的每个元素都有不同的类。为了降落伞,为了冲浪者,为了圈圈和奖金。它们都非常相似,所以我只复制降落伞类,如下所示:

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;
        }

    }

}
包{
导入flash.display.MovieClip;
导入flash.utils.Timer;
导入flash.events.*;
导入ascb.util.NumberUtilities;
进口myGlobal;
导入flash.geom.*;
导入com.demonters.debugger.MonsterDebugger;
公共类paracaidistasClass扩展了MovieClip{
私有变量n:Number=0;
私有变量rotacionDelAvion:int=1;
private var temporizador:Timer=new Timer(myGlobal.paracaidistemporizador[myGlobal.nivel-1],0);
公共函数paracaidistasClass(){
//构造代码
temporizador.start();
temporizador.addEventListener(TimerEvent.TIMER,emisor);
addEventListener(Event.ENTER_FRAME,altura);
}
私人功能altura(e:事件):无效{
if(myGlobal.detener==false){
this.y=this.y-myGlobal.altura;
}
}
专用函数发射器(e:TimerEvent){
if(myGlobal.detener==false){
temporizador.delay=NumberUtilities.random(myGlobal.paracaidistasMinimoDelay[myGlobal.nivel-1],myGlobal.paracaidistasMaximoDelay[myGlobal.nivel-1]);
var paracaidista=新的paracaidista类;
这是addChildAt(paracaidista,0);
副Caidista.y=随机数(-350,50);
myGlobal.cantidadDeParacaidistas=this.numChildren;
addEventListener(Event.ENTER_FRAME,moviminto);
}
}
私有函数moviminto(事件:事件):void{
if(myGlobal.detener==false){

对于(var i:Number=0;i不确定emisor计时器回调中到底发生了什么,但每次满足条件时您都会添加一个eventListener。如果每个降落伞都有一个eventListener,那么您不会在任何地方删除该eventListener。整个应用程序只需要一个ENTER\u FRAME eventListener,只需更新子类即可es.

是的,这看起来像是正在发生的事情。他们多次添加同一个事件侦听器,以便每次函数都运行多次(我打赌,随着时间的推移,这个数字会越来越大)。要么只添加一次,要么在处理程序的第一行中删除它。问题应该解决。他提到这是几个类似的类中的一个-这也难怪事情会升级。我解决了这个问题,性能稍微好一点,但我仍然有问题。我猜问题可能是什么,我认为它与此相关感谢您在我的代码中指出的内容。我有一个问题:当我删除在其构造函数中添加事件侦听器的类的子类时,事件侦听器会随子类一起消失或保留?如果您只执行removeChild(childObj);则否,侦听器仍然存在。如果在removeChild(childObj)之后添加childObj=null;则,然后删除侦听器。作为最佳实践方法的一部分,在子类中创建一个destroy()函数,该函数将删除所有EventListener、所有子对象并将其置空。然后将obj置空。