开发者

ComboBox in ActionScript 3 (Flex)

开发者 https://www.devze.com 2023-03-12 15:45 出处:网络
I have to use a menu in my actionscript project (FLARManager + Away3D) and I want to use a combobox. I try but I fail.

I have to use a menu in my actionscript project (FLARManager + Away3D) and I want to use a combobox. I try but I fail.

My simple code is

import spark.components.ComboBox;
import mx.collections.ArrayCollection;

public class MyComboBox extends ComboBox
{
    public function MyComboBox()
    {
        super();

        var dp_ac:ArrayCollection = new ArrayCollection([ 
            {label: "test 1"}, 
            {label: "test 2"}, 
            {label: "test 2"}
        ]);
        this.dataProvider = dp_ac;
        this.labelField = "label";

        this.x=200;
        this.y=-200;
        this.width=20;
        this.height=10;
    }
}

Then, in my project file I code:

import aplicacion.MyComboBox;

import artedra.*;

import com.transmote.flar.FLARManager;
import com.transmote.flar.marker.FLARMarker;
import com.transmote.flar.marker.FLARMarkerEvent;
import com.transmote.flar.tracker.FLARToolkitManager;

import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;

import spark.components.ComboBox;
import spark.components.Group;

[SWF(width="800", height="600", frameRate="30", backgroundColor="#C0C0C0")]

/**
 * 
 * @author Iago Laz
 * 
 */ 
public class ARapp extends Sprite {
    private var flarManager:FLARManager;
    private var activeMarker:FLARMarker;
    private var artedraManager:IARTeDraManager = new ARTeDraManager(stage);

    private var targetDetected:Boolean = new Boolean(false);
    private var next:Number = ARTeDraManager.GRID;

    public function ARapp () {          
        addEventListener(Event.ADDED_TO_STAGE,onAdded);     
    }

    private function onAdded (evt:Event) :void {
        removeEventListener(Event.ADDED_TO_STAGE,onAdded);
        flarManager = new FLARManager("../resources/flarConfig.xml",new FLARToolkitManager(),stage);

        flarManager.addEventListener(FLARMarkerEvent.MARKER_ADDED,onMarkerAdded);
        flarManager.addEventListener(FLARMarkerEvent.MARKER_UPDATED,onMarkerUpdated);
        flarManager.addEventListener(FLARMarkerEvent.MARKER_REMOVED,onMarkerRemoved);

        flarManager.addEventListener(Event.INIT,onFlarManagerInited);
    }

    private function onFlarManagerInited (evt:Event) :void {
        flarManager.removeEventListener(Event.INIT,onFlarManagerInited);

        artedraManager.showModel();
        artedraManager.showViews();
        artedraManager.showGridDots(ARTeDraManager.GRID);

        var g:Group = new Group();
        var cb:MyComboBox = new MyComboBox();
        g.addElement(cb);

        stage.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
        stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
    }

    private function reportKeyDown(event:KeyboardEvent):void {
        if(event.keyCode==32) {
            if(next==ARTeDraManager.DOTS)
                next=ARTeDraManager.EMPTY;
            else
                next++;
            artedraManager.showGridDots(next);
        }
    } 

    private function onMarkerAdded (evt:FLARMarkerEvent) :void {
        trace("["+evt.marker.patternId+"] added");
        activeMarker = evt.marker;
        targetDetected = true;
    }

    private function onMarkerUpdated (evt:FLARMarkerEvent) :void {
        activeMarker = evt.marker;
        targetDetected = true;
    }

    private function onMarkerRemoved(evt:FLARMarkerEvent):void
    {
        trace("["+evt.marker.patternId+"] removed");
        activeMarker = null;
        targetDetected = false;
    }

    private function onEnterFrame(evt:Event):void {
        if(activeMarker) {
            artedraManager.rotateShapes(activeMarker.rotationZ);
        }
        artedraManager.showSphereMarkerDetected(targetDetected);
        artedraManager.renderScenes();
    }
}

But it doesn't show anything. I think I'm missing something but I don't know what.

Can anyone help me, please?

Edit with error message:

TypeError: Error #1009: No se puede acceder a una propiedad o a un m賯do de una referencia a un objeto nulo.
at mx.styles::StyleManager$/getStyleManager()[E:\dev\4.x\frameworks\projects\framework\src\mx\styles\StyleManager.as:125]
at mx.styles::StyleProtoChain$/getStyleManager()[E:\dev\4.x\frameworks\projects\framework\src\mx\styles\StyleProtoChain.as:970]
at mx.styles::StyleProtoChain$/initProtoChain()[E:\dev\4.x\frameworks\projects\framework\src\mx\styles\StyleProtoChain.as:149]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::initProtoChain()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:10446]
at mx.core::UIComponent/regenerateStyleCache()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:10509]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::addingChild()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:7213]
at mx.core::UIComponent/addChildAt()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:6943]
at spark.components::Group/addDisplayObjectToDisplayList()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Group.as:1825]
at spark.components::Group/http://www.adobe.com/2006/flex/mx/internal::elementAdded()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Group.as:1416]
at spark.components::Group/addElementAt()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Group.as:1183]
at spark.components::Group/addElement()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Group.as:1141]
at aplicacion::ARapp/onFlarManagerInited()[C:\Users\Iago\workspace\PFG_ARTeDra\src\aplicacion\ARapp.as:75]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.transmote.flar::FLARManager/onTrackerComplete()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\FLARManager.as:1098]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.transmote.flar.tracker::FLARToolkitManager/onTrackerComplete()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\tracker\FLARToolkitManager.as:384]
at com.transmote.flar.tracker::FLARToolkitManager/initTracker()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\tracker\FLARToolkitManager.as:332]
at com.transmote.flar::FLARManager/onTrackerInited()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\FLARManager.as:1080]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.transmote.flar.tracker::FLARToolkitManager/checkForInitComplete()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\tracker\FLARToolkitManager.as:374]
at com.transmote.flar.tracker::FLARToolkitManager/onPatternsLoaded()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\tracker\FLARToolkitManager.as:364]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.transmote.flar.pattern::FLARPatternLoader/checkForLoadCompletion()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\pattern\FLARPatternLoader.as:205]
at com.transmote.flar.pattern::FLARPatternLoader/onPatternLoaded()开发者_JAVA技巧[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\pattern\FLARPatternLoader.as:197]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()


Based on the code, I'm guessing you aren't sizing the ComboBox by setting the height and width properties or giving it a position by setting the x and y properties.

Both of these things are most commonly done in the updateDisplayList method. In the Spark architecture updateDisplayList() is usually implemented in the skin class.

More info:

http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html

http://help.adobe.com/en_US/flex/using/WS460ee381960520ad-2811830c121e9107ecb-7fff.html

0

精彩评论

暂无评论...
验证码 换一张
取 消