After your last reply, I went through and (as far as I know) ensured I
was removing all event listeners and setting the object to null. I
spent quite a lot of time trying to make sure there were no more
pointers to the object but it still made no difference. Thats when I
implemented the method you suggested of re-using the objects.

Interestingly, it always used to crash around the 28mb mark but now it
goes beyond that and runs fine. It did seem to be the sheer number of
objects rather than the amount of memory being used.

On Jun 14, 12:49 am, Li <[email protected]> wrote:
> Ok, a couple of questions then:
> - Are you attaching any listeners to the missiles and perhaps forgetting to
> remove them? Flash's garbage collector does not remove an object if there is
> at least one other object still active that is referencing it.
> - Once you remove a missile, what do you do with it? Do you reuse it, do you
> destroy it? One thing is to remove objects from the display list, and
> another is to destroy them.
>
> On Sun, Jun 13, 2010 at 8:05 PM, robbie 
> <[email protected]>wrote:> Hi Li
>
> > Sorry I've taken a while to respond, I've been away from this project
> > for a couple of weeks. Its tricky to explain but hopefully the
> > following will give you an idea of what I'm doing.
>
> > In my main loop I'm adding things like aircraft, missiles, particles
> > etc at any given interval. I have methods to add the entities and
> > within the constructors of each entity I'm adding simple geometry
> > (planes mainly) and then I'm finioshed with them,I remove them.
>
> > public function addEnemyMissile(startPos:Vector3D):Boolean {
> >     var missile:Missile = new Missile();
> >    missile.initialise();
>
> >    missile.x = startPos.x;
> >    missile.y = startPos.y;
> >    missile.z = startPos.z;
> >    missile.lookAt(camera.position);
>
> >   scene.addChild(missile);
> >   missiles.push(missile);
> >   return(true);
>
> > }
>
> > Then the missile constructor adds some child geometry to it (Missile
> > inherits from ObjectContainer3D)
> > public function Missile(isEnemy:Boolean=false)
> > {
> >   super();
> >   plane1=(Helper3DLite.createPlane(getWidth(), getHeight(), 1, 1,
> > getColour()));
> >   plane1.bothsides = true;
> >   plane1.rotationZ = 90
> >   this.addChild(plane1);
> >   this.layer = new Sprite();
> >   setFilters();
>
> > }
> > Then when its removed
> > override protected function
> > removeEntity(entity:BaseEntity3DLite):void
> > {
> >    if(entity is Missile){
> >        for (var i:int = 0; i < missiles.length; i++) {
> >            if (entity == missiles[i]) {
> >                missiles.splice(i, 1);
> >                break;
> >        }
> >     }
> > ....
> >   entity.parent.removeChild(entity);
> > }
>
> > I basically create an object that inherits from ObjectContainer3d, add
> > some child geometry in the constructor and then add it to a list. When
> > its removed, I remove it from the list and its parent.
>
> > I've had to strip out and simplify a lot of the code to try and
> > explain it, theres a lot of other stuff going on. Without posting all
> > my source code, its difficult to try and explain. Not sure if I make
> > sense but hopefully you can understand my process. Maybe you can spot
> > something that could be causing a memory leak?
>
> > On Jun 2, 1:18 pm, Li <[email protected]> wrote:
> > > Well yes, that's absolutely possible. Could you abstract some of your
> > code
> > > here, or an equivalent so I can debug for a memory leak in the engine?
>
>

Reply via email to