Панель прокрутки в Papervision3D - PullRequest
0 голосов
/ 01 сентября 2009

У меня серьезные проблемы с компонентом ScrollPane в Papervision3D. Эта проблема была поднята на нескольких разных форумах, но не решена:

Я попытался динамически создать ScrollPane, а также перетащить его на сцену, и он всегда отображается с размером по умолчанию (100, 100) при добавлении в MovieClip в среде PaperVision3D. Я даже не могу заставить Tween работать с его размером.

1 Ответ

1 голос
/ 02 сентября 2009

Хорошо, вот и все.

Я пытался заставить его работать с MovieAssetMaterial, не повезло. Если я прослежу сцену внутри MovieAssetMaterial, сцена будет нулевой, и я предполагаю, что поэтому полоса прокрутки не будет работать должным образом. Это контейнер, поэтому ему нужна сцена для правильной настройки.

Мне удалось получить панель прокрутки 200x200 на плоскости papervision и интерактивную с небольшим количеством обходных путей. Вот мой код:

package{

    import org.papervision3d.*;
    import org.papervision3d.view.*;
    import org.papervision3d.cameras.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.scenes.*;
    import org.papervision3d.render.*;

    import flash.display.*;
    import flash.events.*;

    import fl.controls.*;
    import fl.containers.*;

    public class PV3DScrollPane extends MovieClip{

        private var viewport:Viewport3D;
        private var camera:Camera3D;
        private var scene:Scene3D;
        private var renderer:BasicRenderEngine;
        private var plane:Plane;

        public function PV3DScrollPane(){
            init3D();
        }

        private function init3D():void
        {       
            //setup 3d
            viewport = new Viewport3D(1024, 768, false, true);
            addChild(viewport);
            camera = new Camera3D();
            camera.z = -500;
            camera.zoom = 1;
            camera.focus = 500;
            camera.target = DisplayObject3D.ZERO;
            scene = new Scene3D();
            renderer = new BasicRenderEngine();
            //setup plane
            plane = makePlane();
            stage.addEventListener(Event.ENTER_FRAME, loop);
        }

        public function makePlane():Plane
        {
            //setup scroll pane
            var sp:ScrollPane = new ScrollPane();
            addChild(sp);
            sp.x = 1000;//hide it off stage, visible doesn't help much
            sp.source = 'http://www.helpexamples.com/flash/images/image1.jpg';
            sp.setSize(200, 200);
            //setup material & plane
            var mat:MovieMaterial = new MovieMaterial(sp, false, true, false);
            mat.interactive = true;
            var plane:Plane = new Plane(mat, 0, 0, 10, 10);
            scene.addChild(plane);
            return plane;
        }

        private function loop(evt:Event):void
        {
                //plane.rotationY++;
                renderer.renderScene(scene, camera, viewport);
        }
    }
}

И объяснения: Я пытался использовать BasicView, но я не мог получить те же результаты, поэтому я использовал oldschool способ создания сцены, камеры, визуализации и области просмотра. Поскольку ScrollPane нужна сцена, я добавил ее на сцену, а затем установил ее размер. Я создал MovieMaterial, используя ScrollPane, и установил для его интерактивности значение true. Я «спрятал» компонент, разместив за сценой. Настройка visible to false вернула меня к проблеме 100x100.

Я немного погуглил, потому что вспомнил компоненты пользовательского интерфейса, используемые для работы с papervision. И это правда, они использовали для работы. Здесь - пост, который я запомнил. Blitz Agency имеет аналогичную должность некоторое время назад. Вы можете найти InteractiveMovieMaterial.as, если вы воспользуетесь Google, но он не работает с текущей версией papervision, так как метод drawFace3D больше не существует, все немного изменилось. После того, как я сделал исправление, я нашел более новую (2008) запись в блоге на сайте Джона Грдена об этой проблеме. В подходе есть сходство, но я еще не прошел через все эти проблемы.

Надеюсь, это поможет!

...