| Ultrashock Forums
• AS3 - Flex Gumbo Papervision Memory Issue |
|||
![]() |
||||
| Search this Thread | Thread Tools | Display Modes |
|
|
|||||||||||||||||||||||||
![]() |
Ultrashock Member Comments:
|
2008-11-20
#2 |
||
|
one thing i've learned in all my years of dev (and especially since picking up C/Objective-C again) is you can not rely on other things to handle garbage collection/memory management for you. you must, i repeat: must, handle your own memory management. make sure bitmaps are being disposed of properly (look at the BitmapData dispose() method). make sure all your listeners are removed upon being removed from the display list and prior to it being killed. null out objects after you remove your listeners on it to ensure that the object is flagged for deletion. there are a lot of other things you should watch out for and i'm sure you can go through your app and find many places where this is not being handled. especially if you're using an outside framework other than your own.
|
|
|
2008-11-20
#3 |
||
|
My code is as follows: .............................................. .............................................. Main App (Interface) Code portion: <mx:State name="Car3DScene" enterState="initSWF(event);" exitState="unloadSWFHandler(event);"> <mx:AddChild relativeTo="{panel1}" position="lastChild"> <mx:Canvas width="100%" height="100%" minHeight="340" minWidth="920" borderColor="#1d1d1d" borderThickness="1" borderStyle="solid" backgroundAlpha="1" backgroundColor="#000000"> <mx:Image x="0" y="0" width="295" height="250" id="myLogo" source="@Embed('assets/images/scene3dMainImage.png')" autoLoad="true" maintainAspectRatio="false"/> <mx:Script> <![CDATA[ import flash.events.*; import flash.net.URLRequest; import mx.controls.SWFLoader; import mx.events.FlexEvent; import flash.display.Loader; public var swfContent:MovieClip; public function initSWF(e:Event):void { myLoader.addEventListener(Event.INIT,loadHandler,f alse, 0, true); myLoader.addEventListener(Event.UNLOAD,unloadSWFHa ndler,false, 0, true); myLoader.load("assets/swfs/PV3DCanvasSWFFVPortWR.swf"); } private function loadHandler(e:Event):void { swfContent = e.target.content; } private function unloadSWFHandler(e:Event):void { swfContent.loaderInfo.loader.unloadAndStop(true); //myLoader.unloadAndStop(true); } ]]> </mx:Script> <mx:SWFLoader x="295" y="0" width="625" height="250" minWidth="625" minHeight="250" maintainAspectRatio="false" scaleContent="true" blendMode="normal" id="myLoader" alpha="1"/> .................................................. ..... .................................................. ..... Here is the code of the incoming SWF: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" preloader="com.usppro.BasicCustomPreloader" layout="absolute" applicationComplete="init3D();"> <mx:Script> <![CDATA[ import mx.controls.*; import flash.display.*; import objects.*;//The as3 geom (3d model) classes import org.papervision3d.cameras.*; import org.papervision3d.materials.*; import org.papervision3d.materials.special.*; import org.papervision3d.objects.*; import org.papervision3d.objects.special.*; import org.papervision3d.render.*; import org.papervision3d.scenes.*; import org.papervision3d.view.*; import org.papervision3d.objects.primitives.*; import org.papervision3d.materials.*; import org.papervision3d.view.*; import org.papervision3d.core.utils.*; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.core.geom.renderables.*; private var camera :Camera3D; private var renderer :BasicRenderEngine; private var scene :Scene3D; private var viewport :Viewport3D; private var universe isplayObject3D; private var c:CarFinal;//The car 3d model class [Embed(source="/assets/Car_Black.jpg")] private var CarTexture:Class; private function init3D():void { Application.application.stage.align = StageAlign.TOP_LEFT; Application.application.stage.scaleMode = StageScaleMode.NO_SCALE; Application.application.stage.quality = StageQuality.LOW; Application.application.stage.frameRate = 30; viewport = new Viewport3D(625,250,false,false,true,true); pv3dCanvas.rawChildren.addChild(viewport); pv3dCanvas.rawChildren.addChild(new Stats()); renderer = new BasicRenderEngine(); scene = new Scene3D(); camera = new Camera3D(universe,18,200); camera.x = 0; camera.y = 0; camera.z = -200; createObjects(); addEventListeners(); } private function createObjects():void { c = new CarFinal(); c.material = new BitmapMaterial(new CarTexture().bitmapData); c.x = 0; c.y = 0; c.z = 0; universe = new DisplayObject3D(); universe.addChild(c); scene.addChild(universe); universe.x = 200000; universe.y = -200000; universe.rotationY = -90; camera.target = universe; } private function addEventListeners():void { addEventListener(Event.ENTER_FRAME, loop3D,false,0,true); } public function loop3D(e:Event):void { camera.target.x -= (((mouseX - (pv3dCanvas.width * 0.5)) * 12) + camera.target.x) / 24; camera.target.y -= (((mouseY - (pv3dCanvas.height * 0.5)) * 12) + camera.target.y) / 24; universe.yaw(-0.6); renderer.renderScene(scene, camera, viewport); } ]]> </mx:Script> <mx:Canvas width="625" height="250" x="0" y="0" blendMode="normal" id="pv3dCanvas" backgroundColor="#000000" backgroundAlpha="1"> </mx:Canvas> </mx:Application> .............................................. .............................................. Here is a code portion of the 3d car model class package objects { import org.papervision3d.core.*; import org.papervision3d.core.geom.*; import org.papervision3d.core.geom.renderables.Triangle3D ; import org.papervision3d.core.geom.renderables.Vertex3D; import org.papervision3d.core.math.NumberUV; import org.papervision3d.core.proto.*; public class CarFinal extends TriangleMesh3D { public var verts :Array; public var faceAr:Array; public var uvs :Array; private function v(x:Number,y:Number,z:Number):void { verts.push(new Vertex3D(x,y,z)); } private function uv(u:Number,v:Number):void { uvs.push(new NumberUV(u,v)); } private function f(vn0:int, vn1:int, vn2:int, uvn0:int, uvn1:int,uvn2:int):void { faceAr.push( new Triangle3D( this, [verts[vn0],verts[vn1],verts[vn2] ], null, [uvs[uvn0],uvs[uvn1],uvs[uvn2]] ) ); } public function cobraCarFinal( material:MaterialObject3D=null, initObject:Object=null ) { super( material, new Array(), new Array(), null ); verts = this.geometry.vertices; faceAr= this.geometry.faces; uvs =new Array(); v(108.544,-31.9748,-101.242); ........................... f(1248,5195,5196,1248,5195,5196); this.geometry.ready = true; } } } Pls show me how |
|
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|


) but i
3 comments
| 1459 views



Linear Mode