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!