Game: http://positlabs.com/files/code/drive/
I'm making a driving game of sorts. I made a dust effect that spawns a
textured plane on enterframe 25% of the time. This plane grows for
some time, and then it's removed from the scene.
I made sure to limit the number of planes being displayed to 25.
The game crashes after some time due to running out of resources for
vertices or something like that. I don't think the planes are being
disposed of properly.
Here's the class:
package {
import away3d.primitives.Plane;
import flash.events.TimerEvent;
import flash.geom.Vector3D;
import flash.utils.Timer;
public class SmokeParticle extends Plane {
public static var globalCount : int;
public static var collection : Vector.<SmokeParticle> = new
Vector.<SmokeParticle>(26, false);
private var fadetimer : Timer = new Timer(100);
public function SmokeParticle(pos : Vector3D, rotY : Number) {
super(Materials.SMOKE_MAT, 128, 128);
if(globalCount > 25) {
destroy(collection[0]);
}
position = pos;
rotationY = rotY + Math.random()*31 - 15;
Drive.view.scene.addChild(this);
collection.push(this);
globalCount++;
fadetimer.addEventListener(TimerEvent.TIMER, fade);
fadetimer.start();
}
private function fade(e : TimerEvent) : void {
scaleX += .3;
scaleY += .3;
if (fadetimer.currentCount == 15)destroy(this);
}
private function destroy(target : SmokeParticle) : void {
if(target != null){
collection.shift();
target.dispose(false);
Drive.view.scene.removeChild(target);
target.fadetimer.removeEventListener(TimerEvent.TIMER, fade);
target.fadetimer.stop();
globalCount--;
}
}
}
}
And here's the error I get:
Exception fault: Error: Error #3691: Resource limit for this resource
type exceeded.
at flash.display3D::Context3D/createVertexBuffer()
at away3d.core.base::SubGeometry/getVertexNormalBuffer()[C:\Users
\Beeker\workspace\Drive\src\away3d\core\base\SubGeometry.as:192]
at away3d.core.base::SubMesh/getVertexNormalBuffer()[C:\Users\Beeker
\workspace\Drive\src\away3d\core\base\SubMesh.as:130]
at away3d.materials.passes::DefaultScreenPass/render()[C:\Users\Beeker
\workspace\Drive\src\away3d\materials\passes\DefaultScreenPass.as:377]
at away3d.materials::MaterialBase/renderPass()[C:\Users\Beeker
\workspace\Drive\src\away3d\materials\MaterialBase.as:308]
at away3d.core.render::DefaultRenderer/drawRenderables()[C:\Users
\Beeker\workspace\Drive\src\away3d\core\render\DefaultRenderer.as:184]
at away3d.core.render::DefaultRenderer/draw()[C:\Users\Beeker
\workspace\Drive\src\away3d\core\render\DefaultRenderer.as:109]
at away3d.core.render::RendererBase/executeRender()[C:\Users\Beeker
\workspace\Drive\src\away3d\core\render\RendererBase.as:308]
at away3d.core.render::DefaultRenderer/executeRender()[C:\Users\Beeker
\workspace\Drive\src\away3d\core\render\DefaultRenderer.as:88]
at away3d.core.render::RendererBase/render()[C:\Users\Beeker\workspace
\Drive\src\away3d\core\render\RendererBase.as:289]
at away3d.core.render::DefaultRenderer/render()[C:\Users\Beeker
\workspace\Drive\src\away3d\core\render\DefaultRenderer.as:79]
at away3d.containers::View3D/render()[C:\Users\Beeker\workspace\Drive
\src\away3d\containers\View3D.as:254]
at Drive/onEnterFrame()[C:\Users\Beeker\workspace\Drive\src\Drive.as:
262]