Преобразование из Viewport3D в IUIComponent с использованием papervision3D и Flex вместе - PullRequest
0 голосов
/ 09 августа 2011

Я занимаюсь разработкой с использованием Eclipse Indigo, Flex 4.5.1, Papervision 3D 2.0.883.По сути, я пытаюсь скомпилировать этот пример papervision3D / Flex , чтобы я мог использовать его для просмотра фильмов на моем собственном сайте.Мне пришлось внести ряд изменений, чтобы заставить его работать с Papervision 3D 2.0, так что это может быть частью проблемы.Мое приложение выдает следующую жалобу, когда я запускаю его во Flash Debugger:

TypeError: Error #1034: Type Coercion failed: cannot convert org.papervision3d.view::Viewport3D@2bf6df49 to mx.core.IUIComponent.
    at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()
    at mx.core::Container/addChildAt()
    at mx.core::Container/addChild()
    at SphericVR/init()
    at SphericVR/___SphericVR_Canvas1_creationComplete()
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent()
    at mx.core::UIComponent/set initialized()
    at mx.managers::LayoutManager/doPhasedInstantiation()
    at mx.managers::LayoutManager/doPhasedInstantiationCallback()

Два бита кода, за которые я считаю ответственным:

public function init( event:Event):void
                {   
                    container = new UIComponent();      
                    container.x = (this.width)/2;
                    container.y = (this.height)/2;                  
                    canvasPv3D.addChild( container );
    //a bunch of mouse-movement stuff, and adding a video display
                    init3D();
                    container.addChild( viewport );
    //some event listeners
    }

и другиеуказанная выше функция:

 private function init3D():void
                {
                    viewport = new Viewport3D(canvasPv3D.width, canvasPv3D.height, true, true);
                    addChild(viewport);

                    scene = new Scene3D();
    //adding camera, renderer, creating a bitmap material, mapping material to a sphere

                    scene.addChild( sphere );
                    canvasPv3D.addEventListener(Event.ENTER_FRAME, loop3D );
                }

1 Ответ

0 голосов
/ 10 августа 2011

Как предполагает www.Flextras.com, проблема заключается в том, что компонент flex, к которому вы пытаетесь добавить область просмотра (Canvas), ожидает компонент Flex, для которого Viewport3D равен , а не .

Быстрый и грязный трюк - добавить окно просмотра к rawChildren и покончить с этим.Я полагаю, что более чистый способ сделать это - иметь класс UIViewport3D, который расширяет Viewport3D, но также реализует необходимые свойства и методы UIComponent.

Посмотрите на другие PV3D & Flex примеры для некоторых идей.

Как упоминалось в J_A_X, PV3D больше не разрабатывается, поэтому, например, Away3D будет лучшей альтернативой.Существует довольно хороший учебник для Away3D и Flex , который вы можете использовать: Away3D_Flex

Goodluck!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...