0

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;
            }
        }
        } 
    }   

}

Michael Donohue
  • 11,776
  • 5
  • 31
  • 44
user1876246
  • 1,219
  • 5
  • 18
  • 33
  • well if your trying to debug on the portable device maybe the device is missing assets to complete compile? every time you compile on your pc all the assets are available maybe your device is missing outside libs – joshua Apr 07 '13 at 06:23
  • TypeError: Error #1009: Cannot access a property or method of a null object reference. THis means the object is null at its time to reference it, got nothing to do with declaring a variable – joshua Apr 07 '13 at 06:26
  • Maybe you should use "captive packaging" in FB when releasing – Alexander Farber Apr 07 '13 at 09:39

1 Answers1

0

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.