简体   繁体   English

Away3D和BB Playbook

[英]Away3D and BB Playbook

I am using Away3D framework inside a Mobile Actionscript Flash Builder project, and trying to debug/run on my bb playbook. 我在Mobile Actionscript Flash Builder项目中使用Away3D框架,并尝试在bb剧本上调试/运行。 When I run/debug through Flash Builder (not bb playbook specific) everything work great. 当我通过Flash Builder(不是特定于bb playbook)运行/调试时,一切正常。 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. TypeError:错误#1009:无法访问空对象引用的属性或方法。
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()[/ Users / jesskeating / Documents / Adob​​e 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.core.managers :: Stage3DManager $ / getInstance()[/ Users / jesskeating / Documents / Adob​​e 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 away3d.containers :: View3D / onAddedToStage()[/ Users / jesskeating / Documents / Adob​​e 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] 在flash.display :: DisplayObjectContainer / addChild()在Main / setupScene([/ Users / jesskeating / Documents / Adob​​e Flash Builder 4.6 / 3DMobile / src / Main.as:85]

at Main()[/Users/jesskeating/Documents/Adobe Flash Builder 4.6/3DMobile/src/Main.as:79] 在Main()[/ Users / jesskeating / Documents / Adob​​e 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. 我知道空对象引用意味着我需要声明/定义一个var,但是由于该应用与Flash Builder完美结合,我无法理解。

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

} }

I don't think BB Playbook's version of AIR supports Stage3D, last I heard they were using AIR 3.1. 我认为BB Playbook的AIR版本不支持Stage3D,最后我听说他们使用的是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. 我读到他们打算用AIR 3.2或更高版本更新SDK,但不确定是否已经发生。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM