Did you ever find a fix for this? Cause I'm having the same problem: spawning a lot of particles and removing them after some time. But eventually I get "Resource limit for this resource type exceeded.". My stack at that moment is slightly different though: flash.display3D::Context3D/createVertexBuffer away3d.core.base::SubGeometry/getUVBuffer at src\away3d\core\base \SubGeometry.as:172 away3d.core.base::SubMesh/getUVBuffer at src\away3d\core\base \SubMesh.as:150
The rest of the stack appears to be the same as yours. I haven't updated Away3D for a while though (since begin April, scared it will break the current code :P) On 11 apr, 19:56, Josh Beckwith <[email protected]> wrote: > 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 tolimitthe 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:Resourcelimitfor thisresourcetypeexceeded. > 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]
