Hi all,

First post from me and an easy problem to solve I think. Just need some new eyes. I'm new to Papervision so have been going through some tutorials. I'm very rusty on ActionScript - haven't done a lot of programming since AS1.0 days.

I have a "TypeError: Error #1009: Cannot access a property or method of a null object reference at test::Papervision3DClass/myLoop()."

So clearly the method myLoop is referencing an object (renderer) that hasn't been instantiated yet.

The original code didn't work for me and I debugged a few typos etc. I am now a bit stuck! Here is the code:

Actionscript Code:
package test{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
   
    //Basic set up for 3D - always need these...
   
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.view.Viewport3D;
   
    //Primitives and materials...
    import org.papervision3d.objects.primitives.Sphere;
    import org.papervision3d.materials.WireframeMaterial;
    import org.papervision3d.core.proto.MaterialObject3D;
   
   
    //Class definition
    public class Papervision3DClass extends Sprite
    {
        private var scene:Scene3D;
        private var camera:Camera3D;
        private var renderer:BasicRenderEngine;
        private var viewport:Viewport3D;
       
        //Define the sphere
        private var sphere:Sphere;
        private var sphereMaterial:MaterialObject3D;
        private var myTheta:Number = 0;
        private var myX:Number = 0;
        private var myY:Number = 0;
        private var myZ:Number = 0;
       
        public function Papervision3DClass()
        {
            trace("Hello 3D World!");
           
            initPV3D();
           
            //Create objects
            createObjects();
           
            //Create Renderer
            createRenderer();
           
           
        }
       
        private function initPV3D():void
        {
            //Create viewport
            viewport = new Viewport3D(0,0,true,false);
            addChild(viewport);
           
            //Create camera
            camera = new Camera3D();
           
            //Create scene
            scene = new Scene3D();
           
           
           
            //Initialise Stage
            stage.align = StageAlign.TOP;
            stage.scaleMode = StageScaleMode.NO_SCALE;
           
        }
       
        //Create your objects method
       
        private function createObjects():void
        {
            //Create a material for the sphere
            var sphereMaterial:MaterialObject3D = new WireframeMaterial(0xFF0000);
           
            //Create/use wireframe material, radius 100, default 0,0,0
            var sphere:Sphere = new Sphere(sphereMaterial, 100, 10, 10);
           
            sphere.x = -300;
            sphere.y = 130;
           
            //Add the sphere to the scene
           
            scene.addChild(sphere);
        }
       
        //Loop renderer
        private function createRenderer():void{
            //create renderer
            renderer = new BasicRenderEngine();        
            addEventListener(Event.ENTER_FRAME, myLoop);
        }
       
        //Single Loop
        private function myLoop(evt:Event):void
        {
           
            //Rotate around x axis
            sphere.rotationX +=2;
           
            //increase angle
            myTheta += 2;
           
            //Plot a circular orbit using sin and cos
           
            myX = Math.cos(myTheta * Math.PI/180) * 100-300;
            myZ = Math.sin(myTheta * Math.PI/180) * 100;
           
            //Set X and Z for sphere
            sphere.x = myX;
            sphere.z = myZ;
           
            //Fattening and shrinking (scale factor)
            myY = 1 + Math.cos(myTheta * Math.PI/180) * 0.7;
            sphere.scaleX = sphere.scaleZ = 1 + Math.sin(myTheta * Math.PI/180) * 0.7;
           
            //Elongate
            sphere.scaleY = myY;
           
            //Render scene
            renderer.renderScene(scene, camera, viewport);
        }
    }
}

Thanks in advance for some assistance!