Flash Papervision3D中的滚动窗格

Flash Papervision3D中的滚动窗格,flash,actionscript-3,actionscript,papervision3d,flash-v3-components,Flash,Actionscript 3,Actionscript,Papervision3d,Flash V3 Components,Papervision3D中的滚动窗格组件存在重大问题。这一问题已在几个不同的论坛上提出,但尚未解决: 我尝试过动态创建滚动窗格,以及将滚动窗格拖到舞台上,当添加到PaperVision3D环境中的MovieClip时,滚动窗格始终以默认大小(100100)显示。我甚至不能让一个Tween来调整它的尺寸。好了,开始吧 我试着让它和电影资产材料一起工作,运气不好。 如果我在MovieAssetMaterial中跟踪stage,stage为null,我猜这就是滚动窗格无法正常运行的原因。它是

Papervision3D中的滚动窗格组件存在重大问题。这一问题已在几个不同的论坛上提出,但尚未解决:

我尝试过动态创建滚动窗格,以及将滚动窗格拖到舞台上,当添加到PaperVision3D环境中的MovieClip时,滚动窗格始终以默认大小(100100)显示。我甚至不能让一个Tween来调整它的尺寸。

好了,开始吧

我试着让它和电影资产材料一起工作,运气不好。 如果我在MovieAssetMaterial中跟踪stage,stage为null,我猜这就是滚动窗格无法正常运行的原因。它是一个容器,因此它需要舞台来正确设置自己

我已经设法在papervision平面上获得了一个200x200的滚动窗格,并与一些解决方法进行了交互。这是我的密码:

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,但无法获得相同的结果,所以我使用了老派的方法来创建场景、摄影机、渲染和视口。 因为ScrollPane需要舞台,所以我将它添加到舞台,然后设置它的大小。 我已经使用滚动窗格创建了一个电影素材,并将其交互性设置为true。 我已经通过放置舞台“隐藏”了组件。将visible设置为false使我回到了100x100问题

我在谷歌上搜索过一点,因为我记得在papervision上使用的UI组件。这是真的,他们曾经工作过。这是我记得的帖子。不久前也有类似的帖子。你可以找到InteractiveMovieMaterial。就好像你在谷歌上搜索它一样,但它不适用于当前的papervision版本,因为再也没有drawFace3D方法了,事情发生了一些变化。在我修复之后,我找到了一个关于这个问题的更新版本(2008)。方法上有相似之处,但我还没有经历所有的麻烦


希望这有帮助

谢谢!约翰·格登的帖子真的很有帮助。酷!很高兴你能解决。我讨厌事情不顺利,这不是你自己的错:)