2011-06-10 22 views
-1

私のアクションスクリプトプロジェクト(FLARManager + Away3D)でメニューを使用する必要があり、コンボボックスを使用したいと思います。私はしようとするが失敗する。ActionScript 3のコンボボックス

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

しかし、それは何も表示されません。

私の単純なコードは、私のプロジェクトファイルIコードで、その後

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

です。私は何かが不足していると思うが、何がわからない。

誰でも助けてくれますか?エラーメッセージを

編集:コードに基づいて

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()[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() 
+1

恐らくあなたは、ビューポート*下の子*を追加しています。もっとコードを表示してください。 –

+0

私が "addChild(cb);"というコードを書くと、または "stage.addChild(cb);"それは同じだ。私はこのインポートを行います: "import mx.collections.ArrayCollection;"および "import spark.components.ComboBox;"私がこの小さなコードだけをメイン関数(コードなし)に入れようとすると、同じです。何も表示しません。 – ilazgo

+0

質問(タイトル)があまりにも一般的です...トラブルが何であるかを説明しようとし始めません! –

答えて

2

は、私はあなたが高さと幅のプロパティを設定するか、xとyを設定することによって、それを位置を与えることでコンボボックスのサイズを設定していない推測していますプロパティ。

この両方の操作は、updateDisplayListメソッドで最も一般的に行われます。 Sparkのアーキテクチャでは、updateDisplayList()は通常スキンクラスに実装されています。

さらに詳しい情報:

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

値をcb.x、cb.y、cb.width、cb.heightに設定しても同じですが、何も表示しません。 あなたが投稿したリンクを理解していれば、updateDisplayList()を呼び出す(または実装する)必要はありません。プロパティが欠けている(高さや幅など)場合、defalut値が必要です。 プロジェクトに単純なコンボボックス(または類似のもの)を入れたいが、私はここにこだわっている:( – ilazgo

+0

あなたの質問を結束させるためにもっとコードを表示する必要があります。手動でupdateDisplayList()を呼び出す必要がありますが、おそらくそれをオーバーライドしてそこにコンボボックスの高さ/幅/ x/yの値を設定する必要がありますが、どのコンポーネントを拡張しているかによって異なります。 – JeffryHouser

+0

ありがとう私はコード全体を使って自分の質問を編集しています(サンプルコードですが実行できません)。これはActionScriptの私の最初のプロジェクトなので、何か重要なものが見つからないことがあります。 – ilazgo