Question

I am using Away3D framework inside a Mobile Actionscript Flash Builder project, and trying to debug/run on my bb playbook. When I run/debug through Flash Builder (not bb playbook specific) everything work great. As soon as I try to run/debug on my actual device I get the following error:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at away3d.core.managers::Stage3DManager()[/Users/jesskeating/Documents/Adobe Flash Builder 4.6/3DMobile/src/away3d-core-fp11_4_0_9_gold(1)/src/away3d/core/managers/Stage3DManager.as:35]

at away3d.core.managers::Stage3DManager$/getInstance()[/Users/jesskeating/Documents/Adobe Flash Builder 4.6/3DMobile/src/away3d-core fp11_4_0_9_gold(1)/src/away3d/core/managers/Stage3DManager.as:45]

at away3d.containers::View3D/onAddedToStage()[/Users/jesskeating/Documents/Adobe Flash Builder 4.6/3DMobile/src/away3d-core-fp11_4_0_9_gold(1)/src/away3d/containers/View3D.as:762]

at flash.display::DisplayObjectContainer/addChild() at Main/setupScene( [/Users/jesskeating/Documents/Adobe Flash Builder 4.6/3DMobile/src/Main.as:85]

at Main()[/Users/jesskeating/Documents/Adobe Flash Builder 4.6/3DMobile/src/Main.as:79]

I know null object reference means I need to declare/define a var but since the app in running perfectly with flash builder I don't understand.

Any help would be much appreciated. My code follows...

package{
import away3d.containers.View3D;
import away3d.entities.Mesh;
import away3d.events.MouseEvent3D;
import away3d.lights.DirectionalLight;
import away3d.materials.ColorMaterial;
import away3d.materials.SkyBoxMaterial;
import away3d.materials.lightpickers.StaticLightPicker;
import away3d.primitives.CubeGeometry;
import away3d.primitives.SphereGeometry;
import away3d.textures.BitmapCubeTexture;
import away3d.textures.BitmapTexture;

import flash.desktop.NativeApplication;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.*;
import flash.events.AccelerometerEvent;
import flash.geom.Vector3D;
import flash.sensors.Accelerometer;
import flash.text.*;


[SWF(width=1024, height=600, frameRate=60)]


public class Main extends Sprite{

    [Embed(source="dice.png")]
    private var Dice:Class;
    [Embed(source="alum-01.png")]
    private var Alum:Class;
    [Embed(source="bat-01.png")]
    private var Bat:Class;
    [Embed(source="brun-01.png")]
    private var Brun:Class;
    [Embed(source="julie-01.png")]
    private var Julie:Class;
    [Embed(source="slice-01.png")]
    private var Slice:Class;

    private var format:TextFormat;
    private var inst:TextField;

    private var myview:View3D = new View3D();;
    private var dice:Mesh;
    private var slice:Mesh;
    private var bat:Mesh;
    private var brun:Mesh;
    private var julie:Mesh;
    private var alum:Mesh;

    private var acc1:Accelerometer;
    private var acc2:Accelerometer;
    private var acc3:Accelerometer;

    private var knife:Mesh;

    public function Main(){
        super();

        // support autoOrients
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

        format = new TextFormat();
        format.size = 26;
        format.color = 0xFFFFFF;
        inst = new TextField;

        inst.defaultTextFormat = format;
        inst.text = "Click on the cube you want to learn the cut of!"
        addChild(inst);
        inst.x = 250;
        inst.y = 300;
        inst.width = 500;
        setupScene();
    }

    private function setupScene():void{
        //adding the view for 3D
        //myview = new View3D();
        addChild(myview);

        var tdice:BitmapCubeTexture = new BitmapCubeTexture(new Dice().bitmapData,
            new Dice().bitmapData,
            new Dice().bitmapData,
            new Dice().bitmapData,
            new Dice().bitmapData,
            new Dice().bitmapData);

        var tslice:BitmapCubeTexture = new BitmapCubeTexture(new Slice().bitmapData,
            new Slice().bitmapData,
            new Slice().bitmapData,
            new Slice().bitmapData,
            new Slice().bitmapData,
            new Slice().bitmapData);

        var tbat:BitmapCubeTexture = new BitmapCubeTexture(new Bat().bitmapData,
            new Bat().bitmapData,
            new Bat().bitmapData,
            new Bat().bitmapData,
            new Bat().bitmapData,
            new Bat().bitmapData);

        var tbrun:BitmapCubeTexture = new BitmapCubeTexture(new Brun().bitmapData,
            new Brun().bitmapData,
            new Brun().bitmapData,
            new Brun().bitmapData,
            new Brun().bitmapData,
            new Brun().bitmapData);

        var tjulie:BitmapCubeTexture = new BitmapCubeTexture(new Julie().bitmapData,
            new Julie().bitmapData,
            new Julie().bitmapData,
            new Julie().bitmapData,
            new Julie().bitmapData,
            new Julie().bitmapData);

        var talum:BitmapCubeTexture = new BitmapCubeTexture(new Alum().bitmapData,
            new Alum().bitmapData,
            new Alum().bitmapData,
            new Alum().bitmapData,
            new Alum().bitmapData,
            new Alum().bitmapData);
        //making the shapes, adding cube to stage
        dice = new Mesh(new CubeGeometry(), new SkyBoxMaterial(tdice));
        myview.scene.addChild(dice);
        dice.x = -270;
        dice.y = 150;

        slice = new Mesh(new CubeGeometry(), new SkyBoxMaterial(tslice));
        myview.scene.addChild(slice);
        slice.x = 0;
        slice.y = 150;

        bat = new Mesh(new CubeGeometry(), new SkyBoxMaterial(tbat));
        myview.scene.addChild(bat);
        bat.x = 250;
        bat.y = 150;

        brun = new Mesh(new CubeGeometry(), new SkyBoxMaterial(tbrun));
        myview.scene.addChild(brun);
        brun.x = -270;
        brun.y = -150;

        julie = new Mesh(new CubeGeometry(), new SkyBoxMaterial(tjulie));
        myview.scene.addChild(julie);
        julie.x = 0;
        julie.y = -150;

        alum = new Mesh(new CubeGeometry(), new SkyBoxMaterial(talum));
        myview.scene.addChild(alum);
        alum.x = 270;
        alum.y = -150;

        //making the mouse work and click event on the cube
        dice.mouseEnabled = true;
        dice.addEventListener(MouseEvent3D.MOUSE_DOWN, function(event:MouseEvent3D):void{clickMe("Dice")});

        slice.mouseEnabled = true;
        slice.addEventListener(MouseEvent3D.MOUSE_DOWN, function(event:MouseEvent3D):void{clickMe("Slice")});

        julie.mouseEnabled = true;
        julie.addEventListener(MouseEvent3D.MOUSE_DOWN, function(event:MouseEvent3D):void{clickMe("Julienne")});

        bat.mouseEnabled = true;
        bat.addEventListener(MouseEvent3D.MOUSE_DOWN, function(event:MouseEvent3D):void{clickMe("Batonnet")});

        brun.mouseEnabled = true;
        brun.addEventListener(MouseEvent3D.MOUSE_DOWN, function(event:MouseEvent3D):void{clickMe("Brunoise")});

        alum.mouseEnabled = true;
        alum.addEventListener(MouseEvent3D.MOUSE_DOWN, function(event:MouseEvent3D):void{clickMe("Alumette")});

        knife = new Mesh(new CubeGeometry, new ColorMaterial(0xFF0000));

        //setting how you look at the view
        myview.camera.z = -500;
        myview.camera.lookAt(new Vector3D());

        //adding the enter frame event for spinning
        addEventListener(Event.ENTER_FRAME, loop);
    }

    private function loop(event:Event):void{

        //making the shapes rotate
        dice.rotationY++;
        slice.rotationY++;
        alum.rotationY++;
        julie.rotationY++;
        bat.rotationY++;
        brun.rotationY++;

        //rendering the view
        myview.render();
    }

    private function clickMe(cutPicked:String):void{

        switch(cutPicked){
            case "Dice":
                acc1.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);
                myview.scene.removeChild(dice);
                myview.scene.removeChild(slice);
                myview.scene.removeChild(alum);
                myview.scene.removeChild(julie);
                myview.scene.removeChild(bat);
                myview.scene.removeChild(brun);
                removeChild(inst);

                myview.scene.addChild(knife);
                //knife.rotateTo(10,10,0);
                break;
            case "Chiffonade":
                //acc3.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate3);
                myview.scene.removeChild(dice);
                myview.scene.removeChild(slice);
                myview.scene.removeChild(alum);
                myview.scene.removeChild(julie);
                myview.scene.removeChild(bat);
                myview.scene.removeChild(brun);
                removeChild(inst);

                myview.scene.addChild(knife);
                knife.x = -75;
                break;
            case "Slice":
                //acc2.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate2);
                myview.scene.removeChild(dice);
                myview.scene.removeChild(slice);
                myview.scene.removeChild(alum);
                myview.scene.removeChild(julie);
                myview.scene.removeChild(bat);
                myview.scene.removeChild(brun);
                removeChild(inst);

                myview.scene.addChild(knife);
                knife.x = -75;
                break;
            case "Alumette":
                //acc2.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate2);
                myview.scene.removeChild(dice);
                myview.scene.removeChild(slice);
                myview.scene.removeChild(alum);
                myview.scene.removeChild(julie);
                myview.scene.removeChild(bat);
                myview.scene.removeChild(brun);
                removeChild(inst);

                myview.scene.addChild(knife);
                knife.x = -75;
                break;
            case "Batonnet":                    
                //acc2.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate2);
                myview.scene.removeChild(dice);
                myview.scene.removeChild(slice);
                myview.scene.removeChild(alum);
                myview.scene.removeChild(julie);
                myview.scene.removeChild(bat);
                myview.scene.removeChild(brun);
                removeChild(inst);

                myview.scene.addChild(knife);
                knife.x = -75;
                break;
            case "Julienne":
                //acc2.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate2);
                myview.scene.removeChild(dice);
                myview.scene.removeChild(slice);
                myview.scene.removeChild(alum);
                myview.scene.removeChild(julie);
                myview.scene.removeChild(bat);
                myview.scene.removeChild(brun);
                removeChild(inst);

                myview.scene.addChild(knife);
                knife.x = -75;
                break;
            case "Brunoise":
                //acc1.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);
                myview.scene.removeChild(dice);
                myview.scene.removeChild(slice);
                myview.scene.removeChild(alum);
                myview.scene.removeChild(julie);
                myview.scene.removeChild(bat);
                myview.scene.removeChild(brun);
                removeChild(inst);

                myview.scene.addChild(knife);
                knife.x = -75;
        }

        knife.mouseEnabled = true;
        knife.addEventListener(MouseEvent3D.MOUSE_DOWN, up);
    }

    private function up(event:MouseEvent3D):void{
        if (Accelerometer.isSupported){
            acc1 = new Accelerometer();
            acc2 = new Accelerometer();
            acc3 = new Accelerometer();

            acc1.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);
        }else{
            // Handle case when the accelerometer is not supported here
        }  
    }

    private function onAccUpdate(e:AccelerometerEvent):void{
        var threshold:Number = 2;
        if(e.accelerationY > threshold){
            knife.rotationX = 45;
            if(knife.rotationX == 45){
                knife.rotationX = -45;
            }
        }
        } 
    }   

}

Was it helpful?

Solution

I don't think BB Playbook's version of AIR supports Stage3D, last I heard they were using AIR 3.1. I read they were planning on updating the SDK with AIR 3.2 or later, but not sure if that has happened yet or not.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top